apache/datafusion-python

Apache DataFusion Python Bindings

这个项目是什么

DataFusion Python 是一个库,让 Python 程序员能够使用 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 格式序列化和反序列化查询计划(一种表示查询计划的标准方式)。
  • 实验性支持将 SQL 转译为 DataFrame 调用,适用于 Polars、Pandas 和 cuDF。

README 还指向了一个调整并行度以最大化 CPU 利用率的指南,但此处不详细描述。

一个具体示例(来自 README)

README 展示了一个小脚本,它查询纽约出租车行程数据的 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 修剪等选项。您可以打印上下文以查看其当前配置。

如何安装

列出了三种方式:

  • 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 或 cmake 以支持 protobuf。测试数据来自 git 子模块。该项目还提供:

  • pre-commit 钩子 用于代码检查(可选但推荐;需要 docker 和 cmake)
  • 脚本 用于运行 Python 和 Rust 代码检查器(ci/scripts 目录)
  • 检查上游覆盖率的技能——它帮助审计上游 Apache DataFusion Rust 库中哪些功能尚未在这些 Python 绑定中暴露。您可以要求它检查标量函数、聚合函数、窗口函数、DataFrame、会话上下文、FFI 类型或全部区域。

此处未涵盖的内容

本说明仅基于 README,因此我没有发明超出其所述的功能。如需更深入的文档,README 指向在线 API 文档和示例文件夹。

相关

  • 项目
  • 项目
  • 项目
  • 项目