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 フォルダを指しています。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト