RubyとApache Arrow
by
hatappi
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
RubyとApache Arrow Yusaku Hatanaka (@hatappi) Apache Arrow 東京ミートアップ2018
Slide 2
Slide 2 text
⾃⼰紹介 • Yusaku Hatanaka (@hatappi) • Red Data Tools のメンバー • Ruby, Go, TypeScript C, C++ • 煎り⼤⾖が好き
Slide 3
Slide 3 text
この話のゴール • RubyでApache Arrowを使った取り組みの話や今後どうな ると嬉しいかの話を聞いて「へぇ〜」となる • RubyでApache Arrowを使う開発やApache Arrow本体の 開発に参加したくなる
Slide 4
Slide 4 text
Apache Arrow • 各種⾔語で使⽤できるインメモリのデータ処理プラット フォーム • ⾼速なデータフォーマット、交換処理ロジックによって効 率的なデータ交換処理ロジックなどを提供する
Slide 5
Slide 5 text
Red Data Tools • Ruby⽤のデータ処理ツールを提供するプロジェクト • 基本はGitter上でやりとりをしている • https://gitter.im/red-data-tools/ja • 毎⽉1回ミートアップしてる • 次回は12⽉11⽇ 来週⽕曜⽇ https://speee.connpass.com/event/105238/
Slide 6
Slide 6 text
現状どんなことが できるのか?
Slide 7
Slide 7 text
Red Arrow red-data-tools/red-arrow
Slide 8
Slide 8 text
Red Arrow • Apache ArrowのRuby binding • もともとはred-data-toolsのリポジトリで管理されていた が今はApache Arrow本体にある • GObject Introspectionを使⽤してbindingを実現している • Arrow側の関数情報が更新されていけばRed Arrowもそ の最新の機能を使うことができる
Slide 9
Slide 9 text
データの変換コスト
Slide 10
Slide 10 text
“推測するな。計測せよ”
Slide 11
Slide 11 text
ཁૉ ࣮ߦ࣌ؒ T JSONの読み書き
Slide 12
Slide 12 text
ཁૉ ࣮ߦ࣌ؒ T Apache Arrowの読み書き
Slide 13
Slide 13 text
࣮ߦ࣌ؒ (s) 0 1.5 3 4.5 6 ཁૉ 10000 100000 1000000 10000000 JSON Apache Arrow
Slide 14
Slide 14 text
RubyでCSVをパース
Slide 15
Slide 15 text
CSV ߦ ࣮ߦ࣌ؒ T
Slide 16
Slide 16 text
Ccsv ߦ ࣮ߦ࣌ؒ T
Slide 17
Slide 17 text
Apache ArrowͷCSV Parser • Arrow 0.11.0で⼊った新機能 • データの永続化としてよく使われるCSVを⾼速に読み込ん でApache Arrowのデータとして処理できるようになる
Slide 18
Slide 18 text
Apache Arrow ߦ ࣮ߦ࣌ؒ T
Slide 19
Slide 19 text
࣮ߦ࣌ؒ T ߦ DTW $DTW "QBDIF"SSPX
Slide 20
Slide 20 text
Arrow Arrowすごい Ccsvもすごい
Slide 21
Slide 21 text
データの相互交換
Slide 22
Slide 22 text
ߦ ࣮ߦ࣌ؒ T CSV -> Arrow -> Parquet
Slide 23
Slide 23 text
今後どうなると嬉しいか
Slide 24
Slide 24 text
RubyでもGPU上で データフレームを使いたい
Slide 25
Slide 25 text
cuDF • GPU上でデータフレームを操作するためのライブラリ • RAPIDSというE2Eのデータ分析をGPUで実現するための プロジェクト • Rubyでbindingつくれるとよさそう
Slide 26
Slide 26 text
MySQLの実⾏結果を Apache Arrowのフォーマット で返せると良さそう!
Slide 27
Slide 27 text
CSVJSON ࠓ ͜͏ͳΔͱخ͍͠ ૣ͍
Slide 28
Slide 28 text
mysql2-arrow • mysql2はlibmysqlのRuby binding • ActiveRecordでMySQLを選択した時のアダプターとし ても使⽤される • mysql2を早くできればActiveRecordも早くなって嬉し いかもしれない • mysql2で実⾏した際のMYSQL_RESを取り出すことができ ればArrow形式に変換できそう
Slide 29
Slide 29 text
select * from users; MYSQL_RES Mysql2::Result MYSQL_RESからいくつかのレコードを arrow::RecordBatchにまとめて返す Arrow::RecordBatch として受け取る! 3VCZͷੈք $ $ͷੈք イメージ
Slide 30
Slide 30 text
実⾏イメージ
Slide 31
Slide 31 text
DEMO
Slide 32
Slide 32 text
• ActiveRecord: 6.849s • pluck: 2.450s • Apache Arrow: 0.520s ActiveRecordで使うと
Slide 33
Slide 33 text
ここまでのまとめ • Apache Arrowの開発が進めばRubyだけでなく他の⾔語も 嬉しい! • Ruyb bindingつくるもよし! Apache Arrow本体の開発するもよし! • やりたいことはたくさんある! • red-data-tools/want-to-do