そろそろ使ってみませんかApache Arrow / why-dont-you-arrow-now

そろそろ使ってみませんかApache Arrow / why-dont-you-arrow-now

Japan.R 2019のLTのスライドです。

[参考リンク]
Apache Arrow
https://arrow.apache.org/

Apache ArrowのPMC・須藤さんによる現状の紹介
https://www.clear-code.com/blog/2019/9/30.html

sparklyrの高速化について
https://arrow.apache.org/blog/2019/01/25/r-spark-improvements/

ParquetやFeatherの読み書きの速度比較について
https://ursalabs.org/blog/2019-10-columnar-perf/

C95cdabc569dc4c7750d776687f66037?s=128

yutannihilation

December 07, 2019
Tweet

Transcript

  1. そろそろ使ってみませんか Apache Arrow 2019/12/07 Japan.R 2019 @yutannihilation

  2. ドーモ!! • Hiroaki Yutani (@yutannihilation) • 某メッセージングアプリ会社で データサイエンティスト見習い • 好きな言語:R、忍殺語

    • ggplot2のメンテナ
  3. 近況

  4. None
  5. Apache Arrowとは? • オンメモリで大量のデータを扱うためのプ ラットフォームをつくるプロジェクト – オンメモリに適したデータフォーマット を定義 – そのフォーマットのデータを読み書きす

    るライブラリを様々な言語に提供
  6. Apache Arrowがないとき... コピーと変換処理が発生しまくり! (https://arrow.apache.org/ の図)

  7. Apache Arrowがあるとき!! 共有メモリ上で同じデータを見る (https://arrow.apache.org/ の図)

  8. • ParquetやFeatherのデータを読み書き (arrowパッケージ) • Sparkとの効率的なデータのやりとり (sparklyrパッケージ) RとApache Arrow

  9. Apache Parquetとは? • 列指向のデータフォーマット • CSVと違って規格が決まっているので、 読み書きするソフトの挙動に左右されない (Apache Arrowを使えばなおさら安心!) •

    デフォルトで圧縮が効いている → 他言語との重いデータ共有に便利
  10. 例: Parquet • read_parquet()・write_parquet()で Parquetファイルを読み書きできる • 指定した列だけを読むこともできる! (pushdown) → つまり、全部読むとメモリに乗らず

    エラーになっていたデータも読めるかも
  11. Parquet/Featherの読み書きは data.table::fread()より速い!! (https://ursalabs.org/blog/2019-10-columnar-perf/ の図) data.table arrow(feather)

  12. Python派の人との データ共有にも便利 (https://ursalabs.org/blog/2019-10-columnar-perf/ の図) pyarrow 速い...

  13. Parquetファイルの読み書き dplyr::select()と同じ指定で列を絞り込み arrow::read_parquet("tmp.parquet") arrow::read_parquet("tmp.parquet", starts_with("Sepal")) arrow::write_parquet(iris, "tmp.parquet")

  14. インストールがお手軽に • CRANに上がったので、これだけでOK! install.packages("arrow")

  15. Apache Sparkとは? • ビッグデータの分散処理基盤・フレーム ワーク

  16. R Spark sparklyr ①Sparkからデータを読み込み ②何らかの  処理 ③Sparkにデータを返す 例:Spark

  17. R Spark sparklyr ①Sparkからデータを読み込み ②何らかの  処理 ③Sparkにデータを返す 例:Spark コピー と変換

    ここが遅い
  18. 例:Spark • 以前:一度データをディスクに書いてか らSparkとやりとりするので遅い • 現在:Apache Arrowフォーマットで Sparkと直接やりとりできるようになった (SparkRは3.0からなのでまだ) ※コピーは発生する

  19. 例:Spark(sparklyr) (https://arrow.apache.org/blog/2019/01/25/r-spark-improvements/ の図) Spark → R R → Spark Apache

    Arrowあり
  20. まとめ • Apache Arrowを使うと、 – 巨大なデータを保存・共有するのに便利 (例:Parquet、Feather) – 他のシステムと効率的にデータのやり取 りができる(例:sparklyr)

    • もうすぐ1.0なのでそろそろ使ってみよう!
  21. 今日話せなかったこと • dplyrのバックエンドもあるっぽい • Featherは新フォーマット(v2)があるら しい 気になる方は、12/11開催の Apache Arrow東京ミートアップで!