apache/datafusion-python

Apache DataFusion Python Bindings

このプロジェクトの概要

DataFusion Python は、Python プログラマーに DataFusion へのアクセスを提供するライブラリです。DataFusion は Rust で書かれた高速なインメモリクエリエンジンで、Apache Arrow データと連携します。独自のデータ処理ロジックを書く代わりに、SQL または DataFrame スタイルの呼び出しを使用して、DataFusion に重い処理を任せることができます。これは「バインディング」(Python と Rust エンジン間のブリッジ)であるため、他のデータツールの構成要素としてよく使用されます。README には、Dask SQL、DataFusion Ballista、DataFusion Ray がこれを基盤とするプロジェクトとしてリストされています。

できること

README によると、主な機能は次のとおりです:

  • CSV、Parquet、JSON ファイルに対して SQL クエリ または DataFrame API を実行。
  • クエリは DataFusion の組み込みクエリオプティマイザーによって自動的に 最適化 されます。
  • SQL クエリ内で ユーザー定義の Python 関数 を実行。
  • Pandas や PyArrow をサポートする他の DataFrame ライブラリとデータを交換。
  • クエリプランを Substrait 形式(クエリプランを表す標準的な方法)でシリアライズおよびデシリアライズ。
  • Polars、Pandas、cuDF 向けの SQL から DataFrame 呼び出しへのトランスパイル の実験的サポート。

README はまた、CPU 使用率を最大化するための並列性調整ガイドを指していますが、ここでは詳細を説明していません。

具体的な例(README から)

README には、NYC タクシー旅行データの Parquet ファイルをクエリし、乗客数ごとに旅行をカウントし、結果を Pandas DataFrame に変換し、棒グラフを保存する小さなスクリプトが示されています:

from datafusion import SessionContext

ctx = SessionContext()
ctx.register_parquet('taxi', 'yellow_tripdata_2021-01.parquet')

df = ctx.sql("select passenger_count, count(*) "
             "from taxi "
             "where passenger_count is not null "
             "group by passenger_count "
             "order by passenger_count")

pandas_df = df.to_pandas()
fig = pandas_df.plot(kind="bar", title="Trip Count by Number of Passengers").get_figure()
fig.savefig('chart.png')

別の例では、DataFrame をビューとして登録 して SQL でクエリする方法を示しています。コンテキストを作成し、Python 辞書から DataFrame を構築し、フィルタリングし、register_view で登録し、ビューに対して SQL を実行して結果を収集します。

設定

README によると、コンテキストを作成するときにランタイム設定(メモリ、ディスク)とセッション設定を調整できます。例には、デフォルトのカタログとスキーマの設定、使用するパーティション数の制御、再パーティション結合や Parquet プルーニングなどのオプションの切り替えが含まれます。コンテキストを印刷して現在の設定を確認できます。

インストール方法

3 つの方法がリストされています:

  • uv:uv add datafusion
  • Pip:pip install datafusion(または python -m pip install datafusion)
  • Conda:conda install -c conda-forge datafusion

import datafusion を実行し、datafusion.__version__ を確認することでインストールを検証できます。

AI コーディングアシスタントでの使用

このプロジェクトには、AI コーディングアシスタントに慣用的な DataFusion Python の書き方を教えるスキルファイルが含まれています。npx skills add apache/datafusion-python でインストールするか、プロジェクトの AGENTS.md / CLAUDE.md に参照行を手動で貼り付けることができます。

開発セットアップ(コントリビューター向け)

README では、uv または pip を使用し、Rust と cargo をインストールして開発環境をセットアップする方法を説明しています。maturin(Rust から Python パッケージをビルドするツール)を使用します。protobuf サポートには Protobuf または cmake をインストールする必要があります。テストデータは git サブモジュールから取得されます。このプロジェクトはまた以下を提供します:

  • pre-commit フック によるリンティング(オプションですが推奨;docker と cmake が必要)
  • Python および Rust リンターを実行するための スクリプト(ci/scripts ディレクトリ)
  • アップストリームカバレッジをチェックするスキル — アップストリームの Apache DataFusion Rust ライブラリのどの機能がまだこれらの Python バインディングで公開されていないかを監査するのに役立ちます。スカラー関数、集約関数、ウィンドウ関数、DataFrame、セッションコンテキスト、FFI タイプ、またはすべてを一度にチェックするように依頼できます。

ここでカバーされていないもの

この説明は README のみに基づいており、記載されている以上の機能を発明していません。より深いドキュメントについては、README はオンライン API ドキュメントと examples フォルダを指しています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト