Benchmark Archive

2024-09-09

ベンチマークのソースコード

以下のグラフは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倍でした.

polars-tpch-sf10

利用した各ライブラリのバージョンは以下になります(計測時の最新版).

  • 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/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倍でした.

polars-tpch-sf10

利用した各ライブラリのバージョンは以下になります(計測時の最新版).

  • 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/tpchはpolars向けには全22クエリがありますが,pandasやmodin向けには一部しかありませんでしたので,今回はFireDucks開発チームでpandasを用いてクエリを実装し,それをimport hookを用いてFireDucksで動かしました.これらのクエリは,pandasやmodinで動かす際にも polars/tpchが提供してないクエリに利用しました.

各クエリのソースコードはこちらで公開しています.