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