RubyとApache Arrow
by
hatappi
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
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