RとApache Arrow / r-and-apache-arrow
by
yutannihilation
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
RとApache Arrow 2019/12/11 Apache Arrow東京ミートアップ2019 @yutannihilation
Slide 2
Slide 2 text
ドーモ!! ● Hiroaki Yutani (@yutannihilation) ● 某メッセージングアプリ会社で データサイエンティスト見習い ● 好きな言語:R、忍殺語 ● ggplot2のメンテナ
Slide 3
Slide 3 text
Apache Arrowに、Rユーザーの こんな悩みを解決してほしい ● 他のシステム(Spark、DB)からデータ を取ってくるのが大変... – Java関連のセットアップが難しい – コピー・変換が遅い
Slide 4
Slide 4 text
Apache Arrowに、Rユーザーの こんな悩みを解決してほしい ● 他のデータ分析者(具体的にはPython) とデータを共有するのが大変... – CSVファイルで表現できないデータ型、 パース方法の差異 – メモリに乗りきらない巨大なデータ
Slide 5
Slide 5 text
● Sparkとの効率的なデータのやりとり (sparklyrパッケージ) ● ParquetやFeatherのデータを読み書き (arrowパッケージ) RとApache Arrow
Slide 6
Slide 6 text
R Spark sparklyr ①Sparkからデータを読み込み ②何らかの 処理 ③Sparkにデータを返す 例:Spark
Slide 7
Slide 7 text
R Spark sparklyr ①Sparkからデータを読み込み ②何らかの 処理 ③Sparkにデータを返す 例:Spark コピー と変換 ここが遅い
Slide 8
Slide 8 text
例:Spark ● 以前:一度データをディスクに書いてか らSparkとやりとりするので遅い ● 現在:Apache Arrowフォーマットで Sparkと直接やりとりできるようになった (SparkRは3.0からなのでまだ) ※コピーは発生する
Slide 9
Slide 9 text
例:Spark(sparklyr) (https://arrow.apache.org/blog/2019/01/25/r-spark-improvements/ の図) Spark → R R → Spark 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に登録されたのでインストールもお 手軽になった ● dplyrのバックエンドも開発中 ● Feather v2、Arrow Flight関連は進展なし
Slide 15
Slide 15 text
インストールがお手軽に ● これだけでOK install.packages("arrow")
Slide 16
Slide 16 text
dplyrのバックエンド ● dplyrの文法でデータ操作をすればArrow のデータ操作に翻訳してくれる ● select(列の絞り込み)→ 対応済み ● filter(行の絞り込み) → 対応済み ● mutate(値の操作)→ 未対応 ※Rのデータに変換してから処理
Slide 17
Slide 17 text
dplyrのバックエンド ● Gandivaでできる範囲はだいたい実装済み で、mutate()は計算カーネルを使うC++ APIができるの待ち、という感じ? ● Sparkのデータに関してはsparklyrがある ので、これ以上具体的なユースケースが思 いつかない...
Slide 18
Slide 18 text
Feather v2 ● 「feather」は、Arrowの仕様のすべてを サポートする「on-disk版のArrow format」を指す名前になる予定らしい (詳しくは ARROW-5510 を参照)
Slide 19
Slide 19 text
まとめ ● Spark ↔ Rのデータのやりとりが高速に ● Parquetファイルが読み書きできる ● CRANからインストールできる ● dplyrバックエンドも開発中