Text
Page: 1
Apache Arrow
データ処理ツールの次世代プラットフォーム
須藤功平
株式会社クリアコード
日本OSS推進フォーラム アプリケーション部会 第10回勉強会
2018-12-04
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 2
自己紹介:名前
✓ 須藤功平(すとうこうへい)
「と」はにごらない!
✓ よく使うアカウント名:kou
KOUhei
✓ ↑を使えないときのアカウント名:ktou
Kouhei suTOU
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 3
自己紹介:プログラミング
✓ Rubyが好き
✓ 2004-01からコミッター
✓ 130くらいのライブラリーをメンテナンス
詳細はRubyKaigi 2018でのキーノートを参照
✓ Rubyでプレゼンツールも作っている (このツール)
✓ C/C++を書いている時間も結構ある
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 4
自己紹介:C/C++を書く理由
✓ RubyでC/C++のライブラリーを使うため!
Rubyを書くためにC/C++を書く
✓ Apache ArrowをC++で開発しているのもそう
✓ テストはRubyで書いている
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 5
自己紹介:Apache Arrowの開発
✓ 2016-12-21に最初のコミット
✓ 2017-03-16にGLibバインディングを寄贈
✓ 2017-05-10にコミッター
✓ 2017-09-15にPMCメンバー
✓ 2018-12-02現在コミット数3位(221人中)
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 6
自己紹介:仕事
✓ 株式会社クリアコードの代表取締役
✓ 自由なソフトウェアでビジネスをする会社
自由なソフトウェア:OSSが参考にしたやつ
✓ 私の業務内容
✓ Ruby/Groonga関連の開発・サポート
Groonga:全文検索エンジン。10年くらいやっている。
✓ 自由なソフトウェアの推進
✓ データ処理ツールの開発事業立ち上げ(New!)
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 7
データ処理ツールの開発事業
✓ データ分析をする事業じゃない
✓ データ分析をする人たちが使うツールを
開発する事業
✓ Apache Arrowはそのために有用なツール
Apache Arrowの開発に参加し始めたのはRubyで使いたかったから
事業立ち上げのためにApache Arrowの開発に参加し始めたわけではない
Apache Arrowの開発に参加していたら面白そうと思えてきた
✓ 募集:開発して欲しい・開発したい (転職したい)
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 8
Apache Arrow
各種言語で使える
インメモリー
データ処理
プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 9
実現すること
データ処理の効率化
(大量データが対象)
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 10
効率化のポイント
✓ 速度
✓ 速いほど効率的
✓ 実装コスト
✓ 低いほど効率的
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 11
速度向上方法
✓ 遅い部分を速く
✓ 高速化できる部分を最適化
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 12
遅い部分
データ交換
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 13
データ交換
✓ データ処理ツール間で必要
✓ データ処理システム
✓ 複数ツールを組み合わせて実現
✓ データ処理システムではデータ交換が必須
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 14
データ処理システム例
データ交換
データ収集
ツール
データ前処理
ツール
Apache Arrow - データ処理ツールの次世代プラットフォーム
分析
ツール
可視化
ツール
Powered by Rabbit 2.2.2
Page: 15
データ交換処理
1. シリアライズ
データをバイト列へ変換
2. 転送
バイト列を別ツールに渡す
3. デシリアライズ
バイト列からデータを復元
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 16
データ交換処理:必要なリソース
1. シリアライズ:CPU
2. 転送:I/O (ネットワーク・ストレージ・メモリー)
3. デシリアライズ:CPU
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 17
Ruby+JSONでデータ交換
# 1000要素の数値配列
n = 1000
numbers = n.times.collect {rand}
# シリアライズ
JSON.dump(numbers, output)
# デシリアライズ
JSON.load(input)
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 18
Ruby+JSONの速度の傾向
n
1000
10000
100000
シリアライズ デシリアライズ
0.011秒
0.004秒
0.093秒
0.037秒
0.798秒
0.369秒
注:ストレージI/Oなしで計測
データ量の増加と同じくらいの比率で遅くなる
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 19
データ交換の高速化
✓ データ量が増加すると
シリアライズ・デシリアライズ速度が劣化
✓ 速度劣化を抑えられれば高速化可能
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 20
Apache Arrowのアプローチ
✓ データフォーマットを定義
✓ シリアライズ・デシリアライズが速い
✓ データ量増加に影響を受けにくい
✓ このフォーマットの普及
✓ 各種言語で読み書き処理を実装
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 21
Ruby+Apache Arrowでデータ交換
# 1000要素の数値配列
n = 1000
numbers = Arrow::Int32Array.new(n.times.collect {rand})
table = Arrow::Table.new("number" => numbers)
# シリアライズ
table.save(output)
# デシリアライズ
Arrow::Table.load(input)
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 22
Ruby+Apache Arrowの速度の傾向
n
1000
10000
100000
シリアライズ デシリアライズ
0.0003秒
0.0004秒
0.0004秒
0.0004秒
0.0015秒
0.0004秒
注:ストレージI/Oなしで計測
全体的に速い+デシリアライズ速度が一定
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 23
Apache Sparkでの高速化事例
✓ PySpark
✓ Sparkが分割したデータをPythonで処理
✓ Spark⇔PySpark間でデータ交換
✓ 従来:pickleでシリアライズ
pickle:Python標準のシリアライズ方法
✓ Apache Arrowを使うことで数十倍レベルの高速化
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 24
Apache Arrowフォーマットの特徴
✓ メモリー上でのフォーマットを変換しない
✓ JSONは「数値」を「数字」に変換
✓ 例:29(1バイト整数)→"29"(2バイト文字列)
✓ シリアライズ時:変換不要
✓ デシリアライズ時:パース不要
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 25
メモリーマップの活用
✓ メモリーマップ機能
✓ ファイルの内容をメモリー上のデータのように
アクセスできる機能
✓ readせずにデータを使える(データコピー不要)
✓ パース不要+メモリーマップ
✓ デシリアライズ時にメモリー確保不要
✓ 「転送」コスト削減
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 26
遅い部分の高速化まとめ
✓ 遅い部分を速く
✓ データ交換を速く
✓ 高速化できる部分を最適化
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 27
高速化できる部分
大量データの計算
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 28
大量データの計算の高速化
✓ 各データの計算を高速化
✓ まとまったデータの計算を高速化
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 29
各データの計算の高速化
✓ データを局所化
✓ CPUのキャッシュメモリーを活用できる
✓ 局所化に必要な知識
✓ データの使われ方
✓ 局所化:一緒に使うデータを近くに置く
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 30
想定ユースケース
✓ OLAP (OnLine Analytical Processing)
✓ データから探索的に知見を探し出すような処理
✓ 列単位の処理が多い
✓ 集計処理・グループ化・ソート…
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 31
OLAP向きのデータの持ち方
列
a
b
c
Apache
Arrow
RDBMS
a
1 値 値 値
2 値 値 値
列
3 値 値 値
b
1 値 値 値
2 値 値 値
3 値 値 値
列ごと 値の管理単位 行ごと
列 高速なアクセス単位 行
Apache Arrow - データ処理ツールの次世代プラットフォーム
c
Powered by Rabbit 2.2.2
Page: 32
まとまったデータの計算を高速化
✓ SIMDを活用
Single Instruction Multiple Data
✓ CPU:データをまとめてアラインすると使える
アライン:データの境界を64の倍数とかに揃える
✓ GPUの活用
✓ スレッドを活用
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 33
スレッド活用時のポイント
✓ 競合リソースを作らない
✓ リソースロックのオーバーヘッドで遅くなりがち
✓ アプローチ
✓ リソースを参照するだけ
✓ 各スレッドにコピー
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 34
Apache Arrowとスレッド
✓ データはリードオンリー
✓ スレッド間でオーバーヘッドなしで共有可能
✓ データコピーは極力避けたい
✓ データ交換時もスレッド活用時も
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 35
高速化のまとめ
✓ 速度
✓ 遅い処理(データ交換処理)を高速化
✓ 速くできる処理(大量データの計算)を最適化
✓ 実装コスト
✓ 低いほど効率的
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 36
実装コストを下げる
✓ 共通で使いそうな機能をライブラリー化
✓ メリットを受ける人たちみんなで協力して開発
✓ 最適化もがんばる
✓ Apache Arrowの実装コストは下がらない
✓ Apache Arrowを使うツールの実装コストが下がる
実装コストが下がる:ツール開発者のメリット
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 37
今のApache Arrowが提供する機能
✓ 高速なデータフォーマット
✓ フォーマット変換機能
✓ 効率的なデータ交換処理
✓ 高速なデータ処理ロジック
これらの機能が必要ならメリットがある
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 38
Apache Arrowの向き不向き
✓ 向き
✓ 大量データの交換
✓ メモリー上での大量データの分析処理
✓ 不向き
✓ データの永続化
処理結果の一時的なキャッシュならアリなケースもある
✓ OLAPシステムのバックエンド
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 39
実装コストのまとめ
✓ 速度
✓ 実装コスト
✓ 共通で使いそうな機能をライブラリー化
✓ みんなで協力して開発
✓ 向いていないケースもあるけど
メリットがある人は一緒に開発しよう!
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 40
Apache Arrowが扱えるデータ
✓ データフレーム
✓ 多次元配列
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 41
データフレーム
✓ 行と列で管理する2次元データ
RDBMSでいう表
✓ すべての行は同じ列を持つ
✓ 各列は異なる型にできる
✓ すべての型でnullをサポート
✓ 2次元配列との違い
✓ 2次元配列はすべての値が同じ型
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 42
扱える型:真偽値・数値
✓ 真偽値
✓ 整数({8,16,32,64}ビット{非負,}整数)
✓ 浮動小数点数({16,32,64}ビット)
✓ 128ビット小数
リトルエンディアンのみ対応
ビッグエンディアンに対応させようという動きもある:ARROW-3476
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 43
扱える型:文字列・バイト列
✓ UTF-8文字列
✓ バイナリーデータ({可変,固定}長)
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 44
扱える型:日付・タイムスタンプ
✓ 日付
✓ UNIXエポックからの経過日数(32bit)
✓ UNIXエポックからの経過ミリ秒数(64bit)
✓ タイムスタンプ(64ビット整数)
✓ UNIXエポックからの経過{,ミリ}秒数
✓ UNIXエポックからの経過{マイクロ,ナノ}秒数
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 45
扱える型:時間
✓ 時間
✓ 深夜0時からの経過{,ミリ}秒数
(32bit整数)
✓ 深夜0時からの経過{マイクロ,ナノ}秒数
(64bit整数)
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 46
扱える型:リスト
✓ 0個以上の同じ型の値を持つ
✓ 例:32ビット整数のリスト
✓ 0要素:[]
✓ 2要素:[2, 3]
✓ 型が違う:[1, "X"]
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 47
扱える型:構造体
✓ 1個以上のフィールドを持つ
✓ 各フィールドは別の型にできる
✓ 例:aは32ビット整数、bはUTF-8文字列
✓ 全部ある:{a: 1, b: "X"}
✓ nullもOK:{a: 1, b: null}
✓ bがない:{a: 1}
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 48
扱える型:共用体
✓ 1個以上のフィールドを持つ
✓ 各フィールドは別の型にできる
✓ どれかひとつのフィールドの値のみ設定
✓ 例:aは32ビット整数、bはUTF-8文字列
✓ aだけある:{a: 1}
✓ 2つある:{a: 1, b: "X"}
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 49
扱える型:辞書
✓ 名義尺度なカテゴリーデータ
(統計っぽい説明)
✓ 各値にIDを割り当て、そのIDで値を表現
(実装よりの説明)
✓ 例:["X","X","Y"]を辞書型の列にした場合
✓ 値:[0, 0, 1]
✓ IDの割り当て:{"X": 0, "Y": 1}
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 50
データフレームのまとめ
✓ データフレーム
✓ 2次元データ
✓ 各列は異なる型にできる
✓ 型はたくさんある
✓ 多次元配列
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 51
多次元配列
✓ n次元のデータを扱う
✓ 要素はすべて同じ型
✓ 型は整数・浮動小数点数のみ
✓ 密・疎ともに対応
疎は対応中:ARROW-854 [Format] Support sparse tensor
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 52
密な多次元配列
✓ データの並び方
✓ row-major order: C order
✓ column-major order: Fortran order
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 53
疎な多次元配列
✓ データの持ち方
✓ COO: 0以外の値の情報だけを持つ
✓ CSR: 0以外の値の情報だけを圧縮して持つ
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 54
多次元配列のまとめ
✓ データフレーム
✓ 多次元配列
✓ n次元データ
✓ すべての要素は同じ型の値
✓ 型は整数・浮動小数点数のみ
✓ 疎・密両方サポート
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 55
Apache Arrowが提供する機能
✓ 高速なデータフォーマット
✓ フォーマット変換機能
✓ 効率的なデータ交換処理
✓ 高速なデータ処理ロジック
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 56
フォーマット変換機能
✓ Apache Arrowフォーマット
✓ インメモリー用のフォーマット
✓ 永続化向きではない
✓ 永続化されたデータを使う場合
✓ 永続化に適したフォーマットで保存
✓ 読み込み時にApache Arrowに変換して
インメモリーでの処理にApache Arrowを使う
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 57
対応フォーマット:CSV
✓ よく使われているフォーマット
✓ 亜種が多くてパースが大変
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 58
対応フォーマット:Apache Parquet
✓ 永続化用フォーマット
✓ 列単位でデータ保存:Apache Arrowと相性がよい
✓ 小さい
✓ 列単位の圧縮をサポート
✓ 速い
✓ 必要な部分のみ読み込める (I/Oが減る)
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 59
対応フォーマット:Apache ORC
✓ 永続化用フォーマット
✓ 列単位でデータ保存:Apache Arrowと相性がよい
✓ Apache Parquetに似ている
✓ Apache Hive用に開発
✓ 今はHadoopやSparkでも使える
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 60
対応フォーマット:Feather
✓ 永続化用フォーマット
✓ 列単位でデータ保存:Apache Arrowと相性がよい
✓ データフレームを保存
✓ PythonとR間のデータ交換用
✓ 今は非推奨!
✓ Apache Arrowを使ってね
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 61
対応中フォーマット:Apache Avro
✓ RPCフレームワーク
✓ データフォーマットも提供
✓ 永続化にも使えるフォーマット
✓ ARROW-1209
✓ ちょっと止まっている
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 62
非公式対応フォーマット:MDS
✓ Multiple-Dimension-Spread
✓ Yahoo! Japan開発フォーマット
✓ 詳細:Apache Arrow東京ミートアップ2018
✓ 2018年12月8日(土)開催
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 63
フォーマット変換機能まとめ
✓ 高速なデータフォーマット
✓ フォーマット変換機能
✓ いろいろ対応している
✓ これからも増えそう
✓ 効率的なデータ交換処理
✓ 高速なデータ処理ロジック
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 64
効率的なデータ交換処理
✓ Plasma
✓ 同一ホスト上のプロセス間でのデータ共有
✓ Apache Arrow Flight
✓ Apache ArrowベースのRPC
✓ DB連携
✓ 各種DBのレスポンスをApache Arrowに変換
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 65
Plasma
✓ 同一ホストでのデータ共有システム
✓ サーバー:データ管理
✓ クライアント:データ登録・参照
✓ Apache Arrowフォーマットは使っていない
✓ 任意のバイト列を共有
✓ ユースケース:マルチプロセス連携
✓ もともとRay(分散計算システム)用に開発
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 66
Apache Arrow Flight
✓ Apache ArrowベースのRPCフレームワーク
✓ クライント:リクエストデータフレームを送信
✓ サーバー:レスポンスデータフレームを返信
✓ gRPCベース
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 67
DB連携
✓ DBのレスポンスをApache Arrowに変換
✓ 対応済み
✓ Apache Hive, Apache Impala
✓ 対応予定
✓ MySQL/MariaDB, PostgreSQL, SQLite
✓ SQL Server, ClickHouse
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 68
効率的なデータ交換処理のまとめ
✓ 高速なデータフォーマット
✓ フォーマット変換機能
✓ 効率的なデータ交換処理
✓ 同一ホスト内での高速なデータ交換
✓ 異なるホスト間での高速なデータフレーム交換
✓ DBのレスポンスをApache Arrowに変換
✓ 高速なデータ処理ロジック
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 69
高速なデータ処理ロジック
✓ 高速なデータフレーム処理
✓ CPU:コンパイラーの最適化でベクトル化
✓ GPU:RAPIDSがcuDFを開発
✓ 高速なクエリー処理エンジン
✓ Gandiva
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 70
Gandiva
✓ SQLレベルのクエリーの実行エンジン
✓ 四則演算だけではない
✓ 集計 (GROUP BY) やフィルター (WHERE) などもカバー
✓ 実行時に最適化
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 71
Gandiva:実行時に最適化
✓ クエリーを解析して最適化
✓ 不要な処理を削除・処理順番を入れ替え
やるようになるんじゃないかな。。。
✓ クエリーをJITコンパイルして実行
✓ インタプリターが実行、ではない
✓ 最適化済みネイティブコードにして実行
実行環境のCPUに合わせてベクトル化とか
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 72
高速なデータ処理ロジックのまとめ
✓ 高速なデータフォーマット
✓ フォーマット変換機能
✓ 効率的なデータ交換処理
✓ 高速なデータ処理ロジック
✓ CPUでもGPUでも最適化
✓ クエリーレベルの高速な実行エンジン
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 73
対応言語
✓ C, C#, C++, Go, Java, JavaScript, Lua
✓ MATLAB, Python, R, Ruby, Rust
非公式実装:
✓ Julia (Arrow.jl)
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 74
実装方法
✓ ネイティブ実装
✓ C#, C++, Go, Java, JavaScript, Julia, Rust
✓ C++バインディング
✓ C, Lua, MATLAB, Python, R, Ruby
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 75
C#の実装状況
✓ 未対応の型
✓ 16bit浮動小数点数・小数・構造体・共用体・辞書
✓ 多次元配列未対応
✓ 計算未対応
✓ Plasma・Flight未対応
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 76
C++の実装状況
✓ すべて実装済み
✓ 一番実装が進む
✓ C++実装のバインディングとして
開発する言語があるため
✓ Apache Parquet実装も取り込んだ
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 77
Goの実装状況
✓ 未対応の型
✓ 16ビット浮動小数点数・小数・共用体
✓ 計算対応(Gandivaは未対応)
✓ フォーマット変換はCSVのみ対応
✓ Plasma・Flight未対応
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 78
Javaの実装状況
✓ 未対応の型
✓ 16ビット浮動小数点数
✓ 多次元配列未対応
✓ 計算対応(Gandivaも対応)
✓ フォーマット変換未対応
✓ JDBCを使ったDB連携対応
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 79
JavaScriptの実装状況
✓ TypeScript実装
✓ Webブラウザー上でもNode.js上でも動く
✓ 多次元配列未対応
✓ 計算対応(Gandivaは未対応)
✓ フォーマット変換未対応
✓ Plasma・Flight未対応
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 80
Juliaの実装状況
✓ 未対応の型
✓ 16bit浮動小数点数・小数・構造体・共用体
✓ 多次元配列未対応
✓ 計算未対応
✓ フォーマット変換未対応
✓ Plasma・Flight未対応
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 81
Rustの実装状況
✓ 未対応の型
✓ 小数・バイナリーデータ・共用体・辞書
✓ 計算未対応
✓ フォーマット変換はCSVのみ対応
✓ Plasma・Flight未対応
✓ Apache Parquet実装も取り込んだ
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 82
C・Lua・Rubyの実装状況
✓ C++バインディング
✓ 未対応の型:共用体
✓ 計算対応(Gandivaも対応)
✓ Plasma対応
✓ Flight未対応
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 83
MATLABの実装状況
✓ C++バインディング
✓ Featherの読み込みのみ対応
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 84
Pythonの実装状況
✓ C++バインディング
✓ pandas・NumPy相互変換対応
✓ 計算対応(Gandivaも対応)
✓ Plasma対応
✓ Flight未対応
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 85
Rの実装状況
✓ C++バインディング
✓ 未対応の型:小数・共用体
✓ 計算対応(Gandivaは未対応)
✓ フォーマット変換はFeatherのみ対応
✓ Plasma・Flight未対応
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 86
対応言語まとめ
✓ 基本的な型はすべての言語で対応済み
✓ すでにデータ交換用途に使える
✓ データの高速な計算は一部言語で対応
✓ フォーマット変換も各言語の対応は様々
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 87
まとめ
✓ Apache Arrowが言語を超えて実現すること
✓ データ交換・データ処理の高速化
✓ 実装の共有(共同開発・ライブラリー化)
✓ Apache Arrowを使うとメリットがある人は
Apache Arrowの開発にも参加しよう!
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 88
Apache Arrowの開発に参加を支援
✓ Apache Arrow東京ミートアップ2018
✓ 2018-12-08 13:30-
✓ 目的:開発者を増やす
✓ 対象プロダクト:Apache Arrow・Apache Spark・
Python関連・R関連・Ruby関連などなど
https://speee.connpass.com/event/103514/
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 89
OSSをITに活用
✓ 「使う」だけが活用かな
✓ 「開発」にも参加するのはどうかな
✓ 参加した方が活用できることもあるかも
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2
Page: 90
OSSの開発に参加を支援
✓ OSS Gate東京ワークショップ
✓ 2018-12-15 13:00-
✓ やること:「OSSの開発に参加」を体験
✓ 対象プロダクト:好きなOSS
https://oss-gate.doorkeeper.jp/events/76042
Apache Arrow - データ処理ツールの次世代プラットフォーム
Powered by Rabbit 2.2.2