Upgrade to Pro — share decks privately, control downloads, hide ads and more …

そろそろ使ってみませんか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/

yutannihilation

December 07, 2019
Tweet

More Decks by yutannihilation

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  3. 近況

    View Slide

  4. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide