Benchmark Archive
2024-06-05
以下のグラフはTPC-Hベンチマークに含まれる22種類のクエリでの4つのデータフレームライブラリ(pandas, modin, polars, fireducks)の比較を示しています.縦軸はpandasに対して何倍速いか(実行時間が短いか)を対数軸で示しています.1より大きい場合はpandasより速いことを示しています.データサイズを表すScale Factorは10(約10GB程度のデータセット)で,ファイルIO以外の時間を測定しています.
22クエリの平均でのpandasからの速度向上は,Modinは1.2倍,Polarsは16倍,FireDucksは27倍でした.
利用した各ライブラリのバージョンは以下になります(計測時の最新版).
- pandas: 2.2.2
- Modin: 0.30.0
- Polars: 0.20.29
- FireDucks: 0.11.4
サーバースペック
- CPU: Intel(R) Xeon(R) Gold 5317 CPU @ 3.00GHz x 2sockets (合計48HWスレッド)
- メインメモリ: 256GB
次にScalar Factor(sf)を10, 20, 50にしてデータサイズを大きくした場合にPolarsとFireDucksの比較結果を示します.縦軸はPolarsに対してFireDucksが何倍速いかを示しています.平均ではFireDucksが1.7倍(sf=10), 1.7倍(sf=20), 1.8倍(sf=50)高速となっています.
ベンチマークコードについて
このベンチマークはpolars/tpchをベースにしています.polars/tpchはpolars向けには全22クエリがありますが,pandasやmodin向けには一部しかありませんでしたので,今回はFireDucks開発チームでpandasを用いてクエリを実装し,それをimport hookを用いてFireDucksで動かしました.これらのクエリは,pandasやmodinで動かす際にも 利用しました.
注意 我々のpandas/modin/pandas版のクエリは、クエリの結果が期待される結果に等しいという単純なルールで実装されています。しかし、Polarsのクエリは、ここで説明されているように、異なるルールで実装されているようです。したがって、このベンチマークはリンゴ対リンゴではないと言えるでしょう。
2024-02-06
サーバースペック
- CPU: Intel(R) Xeon(R) Gold 5317 CPU @ 3.00GHz x 2sockets (合計48HWスレッド)
- メインメモリ: 256GB
TPC-Hを用いたデータフレームライブラリの比較
以下のグラフはTPC-Hベンチマークに含まれる22種類のクエリでの4つのデータフレームライブラリ(pandas, modin, polars, fireducks)の比較を示しています.縦軸はpandasに対して何倍速いか(実行時間が短いか)を対数軸で示しています.1より大きい場合はpandasより速いことを示しています.データサイズを表すScale Factorは10(約10GB程度のデータセット)で,ファイルIO以外の時間を測定しています.
22クエリの平均でのpandasからの速度向上は,Modinは1.3倍,Polarsは13倍,FireDucksは18倍でした.
利用した各ライブラリのバージョンは以下になります(計測時の最新版).
- pandas: 2.2.0
- Modin: 0.26.1
- Polars: 0.20.7
- FireDucks: 0.9.8
次にScalar Factor(sf)を10, 20, 50にしてデータサイズを大きくした場合にPolarsとFireDucksの比較結果を示します.縦軸はPolarsに対してFireDucksが何倍速いかを示しています.平均ではFireDucksが1.3倍(sf=10), 1.3倍(sf=20), 1.7倍(sf=50)高速となっています.
ベンチマークコードについて
このベンチマークはpolars/tpchをベースにしています.polars/tpchはpolars向けには全22クエリがありますが,pandasやmodin向けには一部しかありませんでしたので,今回はFireDucks開発チームでpandasを用いてクエリを実装し,それをimport hookを用いてFireDucksで動かしました.これらのクエリは,pandasやmodinで動かす際にも polars/tpchが提供してないクエリに利用しました.
各クエリのソースコードはこちらで公開しています.