Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

近況

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Apache Arrowとは? ● オンメモリで大量のデータを扱うためのプ ラットフォームをつくるプロジェクト – オンメモリに適したデータフォーマット を定義 – そのフォーマットのデータを読み書きす るライブラリを様々な言語に提供

Slide 6

Slide 6 text

Apache Arrowがないとき... コピーと変換処理が発生しまくり! (https://arrow.apache.org/ の図)

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Apache Parquetとは? ● 列指向のデータフォーマット ● CSVと違って規格が決まっているので、 読み書きするソフトの挙動に左右されない (Apache Arrowを使えばなおさら安心!) ● デフォルトで圧縮が効いている → 他言語との重いデータ共有に便利

Slide 10

Slide 10 text

例: Parquet ● read_parquet()・write_parquet()で Parquetファイルを読み書きできる ● 指定した列だけを読むこともできる! (pushdown) → つまり、全部読むとメモリに乗らず エラーになっていたデータも読めるかも

Slide 11

Slide 11 text

Parquet/Featherの読み書きは data.table::fread()より速い!! (https://ursalabs.org/blog/2019-10-columnar-perf/ の図) data.table arrow(feather)

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

まとめ ● Apache Arrowを使うと、 – 巨大なデータを保存・共有するのに便利 (例:Parquet、Feather) – 他のシステムと効率的にデータのやり取 りができる(例:sparklyr) ● もうすぐ1.0なのでそろそろ使ってみよう!

Slide 21

Slide 21 text

今日話せなかったこと ● dplyrのバックエンドもあるっぽい ● Featherは新フォーマット(v2)があるら しい 気になる方は、12/11開催の Apache Arrow東京ミートアップで!