RubyとApache Arrow

C582b722e015633f7900083f8ea75732?s=47 hatappi
December 08, 2018

RubyとApache Arrow

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

C582b722e015633f7900083f8ea75732?s=128

hatappi

December 08, 2018
Tweet

Transcript

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

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

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

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

  5. Red Data Tools • Ruby⽤のデータ処理ツールを提供するプロジェクト • 基本はGitter上でやりとりをしている • https://gitter.im/red-data-tools/ja •

    毎⽉1回ミートアップしてる • 次回は12⽉11⽇ 来週⽕曜⽇
 https://speee.connpass.com/event/105238/

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

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

  8. Red Arrow • Apache ArrowのRuby binding • もともとはred-data-toolsのリポジトリで管理されていた が今はApache Arrow本体にある

    • GObject Introspectionを使⽤してbindingを実現している • Arrow側の関数情報が更新されていけばRed Arrowもそ の最新の機能を使うことができる
  9. データの変換コスト

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

  11. ཁૉ਺ ࣮ߦ࣌ؒ T       

           JSONの読み書き
  12. ཁૉ਺ ࣮ߦ࣌ؒ T       

           Apache Arrowの読み書き 
  13. ࣮ߦ࣌ؒ (s) 0 1.5 3 4.5 6 ཁૉ਺ 10000 100000

    1000000 10000000 JSON Apache Arrow
  14. RubyでCSVをパース

  15. CSV ߦ਺ ࣮ߦ࣌ؒ T      

          
  16. Ccsv ߦ਺ ࣮ߦ࣌ؒ T      

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

  18. Apache Arrow ߦ਺ ࣮ߦ࣌ؒ T     

           
  19. ࣮ߦ࣌ؒ T      ߦ਺  

      DTW $DTW "QBDIF"SSPX
  20. Arrow Arrowすごい Ccsvもすごい

  21. データの相互交換

  22. ߦ਺ ࣮ߦ࣌ؒ T       

          CSV -> Arrow -> Parquet
  23. 今後どうなると嬉しいか

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

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

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

  27. CSV΍JSON ࠓ ͜͏ͳΔͱخ͍͠ ૣ͍

  28. mysql2-arrow • mysql2はlibmysqlのRuby binding • ActiveRecordでMySQLを選択した時のアダプターとし ても使⽤される • mysql2を早くできればActiveRecordも早くなって嬉し いかもしれない

    • mysql2で実⾏した際のMYSQL_RESを取り出すことができ ればArrow形式に変換できそう
  29. select * from users; MYSQL_RES Mysql2::Result MYSQL_RESからいくつかのレコードを arrow::RecordBatchにまとめて返す Arrow::RecordBatch として受け取る!

    3VCZͷੈք $ $ ͷੈք イメージ
  30. 実⾏イメージ

  31. DEMO

  32. • ActiveRecord: 6.849s • pluck: 2.450s • Apache Arrow: 0.520s

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

    • やりたいことはたくさんある! • red-data-tools/want-to-do