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 文档和示例文件夹。
相关
- 项目
- 项目
- 项目
- 项目