Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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バックエンドも開発中