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

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

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