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

More Related Content

What's hot

Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Modelscvpaper. challenge
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Preferred Networks
 
20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術Preferred Networks
 
DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜Jun Okumura
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural NetworksDeep Learning JP
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Ryuichi Sakamoto
 
Machine learning CI/CD with OSS
Machine learning CI/CD with OSSMachine learning CI/CD with OSS
Machine learning CI/CD with OSSyusuke shibui
 
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
深層学習の不確実性 - Uncertainty in Deep Neural Networks -深層学習の不確実性 - Uncertainty in Deep Neural Networks -
深層学習の不確実性 - Uncertainty in Deep Neural Networks -tmtm otm
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理Norishige Fukushima
 
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Kouhei Sutou
 
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3までYahoo!デベロッパーネットワーク
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門Shuyo Nakatani
 
Triplet Loss 徹底解説
Triplet Loss 徹底解説Triplet Loss 徹底解説
Triplet Loss 徹底解説tancoro
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 

What's hot (20)

Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
 
MLOpsはバズワード
MLOpsはバズワードMLOpsはバズワード
MLOpsはバズワード
 
20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術
 
DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装
 
Machine learning CI/CD with OSS
Machine learning CI/CD with OSSMachine learning CI/CD with OSS
Machine learning CI/CD with OSS
 
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
深層学習の不確実性 - Uncertainty in Deep Neural Networks -深層学習の不確実性 - Uncertainty in Deep Neural Networks -
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
 
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
 
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門
 
Triplet Loss 徹底解説
Triplet Loss 徹底解説Triplet Loss 徹底解説
Triplet Loss 徹底解説
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 

Similar to Apache Arrow - データ処理ツールの次世代プラットフォーム

Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataApache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataKouhei Sutou
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataKouhei Sutou
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りKouhei Sutou
 
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウSpark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウFuture Of Data Japan
 
AWSが誕生するまでの秘話
AWSが誕生するまでの秘話AWSが誕生するまでの秘話
AWSが誕生するまでの秘話Yasuhiro Horiuchi
 
サーバーワークス re:invent_2016~新サービス・アップデート紹介~
サーバーワークス re:invent_2016~新サービス・アップデート紹介~サーバーワークス re:invent_2016~新サービス・アップデート紹介~
サーバーワークス re:invent_2016~新サービス・アップデート紹介~Serverworks Co.,Ltd.
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC EnterpriseYusukeKuramata
 
2012 keynote-1
2012 keynote-12012 keynote-1
2012 keynote-1kmiyako
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますinfinite_loop
 
ログブラウズ、解析サービスSumologicの紹介
ログブラウズ、解析サービスSumologicの紹介ログブラウズ、解析サービスSumologicの紹介
ログブラウズ、解析サービスSumologicの紹介Yasuhiro Araki, Ph.D
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナーTakahiro Iwase
 
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンAWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンseiichi arai
 
クラウド運用のためのストリームマイニング
クラウド運用のためのストリームマイニングクラウド運用のためのストリームマイニング
クラウド運用のためのストリームマイニングShin Matsumoto
 
Azure Infrastructure as Code 体験入隊
Azure Infrastructure as Code 体験入隊Azure Infrastructure as Code 体験入隊
Azure Infrastructure as Code 体験入隊Toru Makabe
 
コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話ShunyoKawamoto
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門Daiyu Hatakeyama
 

Similar to Apache Arrow - データ処理ツールの次世代プラットフォーム (20)

Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataApache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory data
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory data
 
Red Data Tools
Red Data ToolsRed Data Tools
Red Data Tools
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入り
 
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウSpark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
 
AWSが誕生するまでの秘話
AWSが誕生するまでの秘話AWSが誕生するまでの秘話
AWSが誕生するまでの秘話
 
Apache Spark on Azure
Apache Spark on AzureApache Spark on Azure
Apache Spark on Azure
 
サーバーワークス re:invent_2016~新サービス・アップデート紹介~
サーバーワークス re:invent_2016~新サービス・アップデート紹介~サーバーワークス re:invent_2016~新サービス・アップデート紹介~
サーバーワークス re:invent_2016~新サービス・アップデート紹介~
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
 
2012 keynote-1
2012 keynote-12012 keynote-1
2012 keynote-1
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
ログブラウズ、解析サービスSumologicの紹介
ログブラウズ、解析サービスSumologicの紹介ログブラウズ、解析サービスSumologicの紹介
ログブラウズ、解析サービスSumologicの紹介
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
 
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンAWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターン
 
クラウド運用のためのストリームマイニング
クラウド運用のためのストリームマイニングクラウド運用のためのストリームマイニング
クラウド運用のためのストリームマイニング
 
Azure Infrastructure as Code 体験入隊
Azure Infrastructure as Code 体験入隊Azure Infrastructure as Code 体験入隊
Azure Infrastructure as Code 体験入隊
 
コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
 

More from Kouhei Sutou

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowKouhei Sutou
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowKouhei Sutou
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアKouhei Sutou
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかKouhei Sutou
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像Kouhei Sutou
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Kouhei Sutou
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムKouhei Sutou
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroongaKouhei Sutou
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Kouhei Sutou
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムKouhei Sutou
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!Kouhei Sutou
 
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版Kouhei Sutou
 
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムPostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムKouhei Sutou
 
Improve extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionImprove extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionKouhei Sutou
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムKouhei Sutou
 
全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!Kouhei Sutou
 
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーKouhei Sutou
 

More from Kouhei Sutou (20)

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェア
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのか
 
Apache Arrow 2019
Apache Arrow 2019Apache Arrow 2019
Apache Arrow 2019
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroonga
 
My way with Ruby
My way with RubyMy way with Ruby
My way with Ruby
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システム
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!
 
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版
 
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムPostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
 
Improve extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionImprove extension API: C++ as better language for extension
Improve extension API: C++ as better language for extension
 
PGroonga & Zulip
PGroonga & ZulipPGroonga & Zulip
PGroonga & Zulip
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
 
全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!
 
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
 

Recently uploaded

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Recently uploaded (9)

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

Apache Arrow - データ処理ツールの次世代プラットフォーム

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