概要
Polars 2.0の主な新機能とパフォーマンス改善について解説。 SQLサポートの強化と高速化によるベンチマーク優位性。 ストリーミングエンジン・アウト・オブ・コア処理のデフォルト化。 新しいMap型データ型の導入と型チェックの厳格化。 今後のロードマップとアップグレードサポートの案内。
Polars 2.0の新機能とハイライト
- Polars 2.0 リリース、主な目的は パフォーマンス向上 と 新機能追加
- アウト・オブ・コア(ディスクスピル) 対応の初期バージョンを標準搭載
- SQLサポート を大幅強化、 パフォーマンス改善 と合わせて DuckDBやDataFusionを上回るベンチマーク結果
- Map型(Arrow MapType) を正式サポート、Pythonの辞書型のような使い勝手
- 型チェックと明示性 の強化、バグの早期発見やAIによるクエリ自動生成の効率化
パフォーマンスとSQLサポートの進化
- SQLをファーストクラス市民 として扱う方針を明確化
- クエリ最適化 の強化(joinの順序最適化、共通部分プランの排除、動的述語・ブルームフィルタの実装)
- TPC-H/TPC-DSベンチマーク で Polars SQL が他エンジンより高速
- c7a.4xlarge(16 vCPU, 32GB) と c7a.metal(192 vCPU, 384GB) で検証
- 全クエリ5回実行 し最速値で比較、フェアな条件設定
- Polarsは全ベンチマークで最速 (一部例外除く)
- スレッド数増加時のオーバーヘッド が小規模データで影響、今後修正予定
- ベンチマーク再現用リポジトリ 公開:https://github.com/pola-rs/polars-2.0-benchmark
ストリーミングエンジンとアウト・オブ・コア処理のデフォルト化
- LazyFrameのcollect呼び出し でデフォルトが ストリーミングエンジン に変更
- メモリ効率とパフォーマンス大幅向上
- join/group_by/unpivot等で順序維持が必要な場合は maintain_order=Trueを指定
- アウト・オブ・コア処理 は RAMの約80% で自動的にスピル開始
- デフォルトのディスク使用上限は64GB
- sort、ウィンドウ関数、多くの式 でディスクスピル対応
- 今後はjoinやgroup-byにも対応予定
新しいMap型データ型の導入
- Arrow MapType を Polars Map dtype として正式サポート
- Python辞書型 のようなキー・値マッピング
- 従来:List(Struct({"key": ..., "value": ...}))として読込
- 2.0以降:map[str, i64]型として扱い、専用の式やメソッドを利用可能
- 主なメソッド例
- キーによる値取得 (固定値・他カラム参照)
- キー存在判定
- 要素数・キー一覧・値一覧取得
Polarsの厳格化とAI時代の開発効率
- エラーは早期に検出 し、暗黙的な型変換・データ不一致は原則禁止
- collect_schema() によるクエリ構造の事前検証が可能
- AIエージェントや人間の高速な開発サイクルを支援
- データ依存のエラーも厳格に検出 し、予期しない挙動を防止
今後の展望とサポート
- 今後はさらにアウト・オブ・コア機能や大規模CPU対応を強化
- Polars Cloudで最速の分散エンジンを目指す
- GeoPolars開発中、今後情報公開予定
- 問題報告はGitHub Issuesへ :https://github.com/pola-rs/polars/issues
- バージョン2.0への移行ガイド も公開中
ベンチマーク補足・スケーリング
- Polarsは大規模データ/コア数増加で高いスケーリング性能
- SF100(TPC-H):16→192 vCPUで3.8倍高速
- DuckDB 1.5.6:3.2倍、DataFusion:1.7倍
- 小規模データでは追加コアの効果が限定的
- ベンチマークは正式TPC-H/TPC-DS仕様準拠ではない点に注意
Polars 2.0 は、 SQLサポート強化・新しいMap型・厳格な型チェック・大規模データ耐性 を備えた、次世代のデータフレームエンジンへの進化を遂げました。
duckdbがもうすぐ2.0.0をリリースするっていう偶然かな? :)