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

RubyとApache Arrow

hatappi
December 08, 2018

RubyとApache Arrow

Apache Arrow東京ミートアップ2018
https://speee.connpass.com/event/103514/
#ArrowTokyo

hatappi

December 08, 2018
Tweet

More Decks by hatappi

Other Decks in Technology

Transcript

  1. RubyとApache Arrow
    Yusaku Hatanaka (@hatappi)
    Apache Arrow 東京ミートアップ2018

    View full-size slide

  2. ⾃⼰紹介
    • Yusaku Hatanaka (@hatappi)
    • Red Data Tools のメンバー
    • Ruby, Go, TypeScript

    C, C++
    • 煎り⼤⾖が好き

    View full-size slide

  3. この話のゴール
    • RubyでApache Arrowを使った取り組みの話や今後どうな
    ると嬉しいかの話を聞いて「へぇ〜」となる
    • RubyでApache Arrowを使う開発やApache Arrow本体の
    開発に参加したくなる

    View full-size slide

  4. Apache Arrow
    • 各種⾔語で使⽤できるインメモリのデータ処理プラット
    フォーム
    • ⾼速なデータフォーマット、交換処理ロジックによって効
    率的なデータ交換処理ロジックなどを提供する

    View full-size slide

  5. Red Data Tools
    • Ruby⽤のデータ処理ツールを提供するプロジェクト
    • 基本はGitter上でやりとりをしている
    • https://gitter.im/red-data-tools/ja
    • 毎⽉1回ミートアップしてる
    • 次回は12⽉11⽇ 来週⽕曜⽇

    https://speee.connpass.com/event/105238/


    View full-size slide

  6. 現状どんなことが
    できるのか?

    View full-size slide

  7. Red Arrow
    red-data-tools/red-arrow

    View full-size slide

  8. Red Arrow
    • Apache ArrowのRuby binding
    • もともとはred-data-toolsのリポジトリで管理されていた
    が今はApache Arrow本体にある
    • GObject Introspectionを使⽤してbindingを実現している
    • Arrow側の関数情報が更新されていけばRed Arrowもそ
    の最新の機能を使うことができる

    View full-size slide

  9. データの変換コスト

    View full-size slide

  10. “推測するな。計測せよ”

    View full-size slide

  11. ཁૉ਺ ࣮ߦ࣌ؒ T





    JSONの読み書き

    View full-size slide

  12. ཁૉ਺ ࣮ߦ࣌ؒ T





    Apache Arrowの読み書き 

    View full-size slide

  13. ࣮ߦ࣌ؒ (s)
    0
    1.5
    3
    4.5
    6
    ཁૉ਺
    10000 100000 1000000 10000000
    JSON Apache Arrow

    View full-size slide

  14. RubyでCSVをパース

    View full-size slide

  15. CSV
    ߦ਺ ࣮ߦ࣌ؒ T





    View full-size slide

  16. Ccsv
    ߦ਺ ࣮ߦ࣌ؒ T





    View full-size slide

  17. Apache ArrowͷCSV Parser
    • Arrow 0.11.0で⼊った新機能
    • データの永続化としてよく使われるCSVを⾼速に読み込ん
    でApache Arrowのデータとして処理できるようになる

    View full-size slide

  18. Apache Arrow
    ߦ਺ ࣮ߦ࣌ؒ T





    View full-size slide

  19. ࣮ߦ࣌ؒ T






    ߦ਺

    DTW $DTW "QBDIF"SSPX

    View full-size slide

  20. Arrow Arrowすごい
    Ccsvもすごい

    View full-size slide

  21. データの相互交換

    View full-size slide

  22. ߦ਺ ࣮ߦ࣌ؒ T





    CSV -> Arrow -> Parquet

    View full-size slide

  23. 今後どうなると嬉しいか

    View full-size slide

  24. RubyでもGPU上で
    データフレームを使いたい

    View full-size slide

  25. cuDF
    • GPU上でデータフレームを操作するためのライブラリ
    • RAPIDSというE2Eのデータ分析をGPUで実現するための
    プロジェクト
    • Rubyでbindingつくれるとよさそう

    View full-size slide

  26. MySQLの実⾏結果を
    Apache Arrowのフォーマット
    で返せると良さそう!

    View full-size slide

  27. CSV΍JSON

    ͜͏ͳΔͱخ͍͠
    ૣ͍

    View full-size slide

  28. mysql2-arrow
    • mysql2はlibmysqlのRuby binding
    • ActiveRecordでMySQLを選択した時のアダプターとし
    ても使⽤される
    • mysql2を早くできればActiveRecordも早くなって嬉し
    いかもしれない
    • mysql2で実⾏した際のMYSQL_RESを取り出すことができ
    ればArrow形式に変換できそう

    View full-size slide

  29. select * from users;
    MYSQL_RES
    Mysql2::Result
    MYSQL_RESからいくつかのレコードを
    arrow::RecordBatchにまとめて返す
    Arrow::RecordBatch
    として受け取る!
    3VCZͷੈք
    $ $ͷੈք
    イメージ

    View full-size slide

  30. 実⾏イメージ

    View full-size slide

  31. • ActiveRecord: 6.849s
    • pluck: 2.450s
    • Apache Arrow: 0.520s
    ActiveRecordで使うと

    View full-size slide

  32. ここまでのまとめ
    • Apache Arrowの開発が進めばRubyだけでなく他の⾔語も
    嬉しい!
    • Ruyb bindingつくるもよし!

    Apache Arrow本体の開発するもよし!
    • やりたいことはたくさんある!
    • red-data-tools/want-to-do

    View full-size slide