【あぱっちあろー】

Apache Arrow とは?

公開:
💡 列データの共通形式で、受け渡しの変換を減らす

分析向けデータを列単位でメモリに表す共通形式と、そのためのソフトウェア群。対応する処理系間で変換やコピーを減らせるが、すべての読み書きがゼロコピーになるわけではない。

📌 このページのポイント
Apache Arrow 整数列:10、NULL、30 の概念図 値の領域:10・?・30 有効性:1・0・1 対応する処理系が共有 同じメモリを参照 寿命の管理が必要 0の位置はNULL。値の領域の「?」は利用しない C Data Interfaceの例。型や受け渡し経路で条件は異なる
列データの共通形式で、受け渡しの変換を減らす
ひよこ ひよこ
Pythonと別の言語で表を渡すとき、作り直すのは大変そうだね?
ペンギン先生 ペンギン先生
同じ内容でも内部の表し方が違うと変換が必要だよね。Arrowは列データの共通形式を定め、対応する処理系の間でデータを受け渡しやすくするんだ。データベースそのものの名前ではないよ。
ひよこ ひよこ
列ごとに並べるのはなぜなの?
ペンギン先生 ペンギン先生
同じ型の値を続けて扱えるので、分析で特定の列をまとめて読む処理に向いているよ。たとえば整数列の10・NULL・30なら、値を置く領域と有効性を示すビットを分けて扱う。NULLの位置の値を通常の数値として読んではいけないんだ。
ひよこ ひよこ
すべての型が同じ構造なの?
ペンギン先生 ペンギン先生
違うよ。文字列なら位置を示すオフセットや文字列データの領域を使う形式もあるし、入れ子の型もある。全型に同じビットマップが必須というわけではなく、型ごとの配置を仕様で合わせるんだ。
ひよこ ひよこ
ゼロコピーって、どこでもコピーが不要なの?
ペンギン先生 ペンギン先生
そうではないよ。同じプロセス内のC Data Interfaceは、対応する処理系がバッファを共有するための仕組みだよ。一方、IPC形式は別プロセスや機械との受け渡しにも使える。圧縮解除や別形式からの変換まで無料になるわけではないんだ。
ひよこ ひよこ
共有するときには何に気を付けるの?
ペンギン先生 ペンギン先生
型や配置の互換性に加え、読み終えるまでメモリを生かしておく必要があるよ。C Data Interfaceには解放のためのコールバックもある。Arrow対応という言葉だけで判断せず、どの経路でコピーや変換が発生するかを確認しようね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Apache Arrow」は「列データの共通形式で、受け渡しの変換を減らす」と押さえておこう!
📖 おまけ:英語の意味
「Apache Arrow」 = 分析データの共通列形式を扱うプロジェクト名
💬 ここでのArrowは製品・プロジェクト名だよ。

参考資料

← 用語集にもどる