Arrow、名前は知ってたけど縁遠いなあと思っていた。最近CSV処理するスクリプト書いてて、そういやデータフォーマットでArrowってあったなっと思って、ちょっと触ってみたのでした。結論、「正しく使えば」、速くなる。Arrowは新しいデータフォーマット。インメモリーでデータを扱う時に最適化されたフォーマット言語やプロセス間でのデータ交換を高速にするのを目標としている列指向のフォーマットという特徴を持っているらしい。PythonのPandasの開発者も開発の中心的人物みたい。これはArrow形式のファイル[1]の他、CSVやParquet形式のファイルも読み込めます。Arrow::Table.load("sample-data.csv")という感じ。CSV、Arrow、Parquetのベンチマーク「列指向」ってことだから(CSVは反対に行指向フォーマット)、一行一行を舐めるような操作は遅いのかな、とか思ったりしつつも、ほんとのところどうなんだろうとベンチマークを取ってみました。8個WSLはIOが遅いことで有名なのでその辺は差し引いてください。33MiBのファイルサイズ8万行ちょっとのデータ量のファイルを元にベンチマークを取ってみました。余談だけど、CSVファイルを調べるならxsvはすごく便利なコマンドなので是非入れよう。ベンチマーク後でスクリプトも置くけど、「ある列(数値)の合計値を計算する」という処理を行っています。Parquestでの同様の結果、となっている。)操作するべしということかな。「更に正しく使えば」Arrowが圧倒的に速かった。CSVを読み込んで何もせずArrowやParquet形式で保存しているので、対象カラムが文字列のままだからだ。本当は、ここをuint32とかuint64とかにして保存してやるとさらに高速化できるんだろうなと思いつつ、Arrowのテーブルからそういう別のテーブルを作る方法がいまいち分からないというか、気軽にベンチマークとる上ではめんどそうなので今日はやめました。仕事で使っててどうにもパフォーマンスが欲しいとなったら挑戦するかも。あと何となく時間できた時とか。