pola-rs/polars
数据用 Rust 编写的高性能 DataFrame 与 SQL 查询引擎,支持 Python、Rust、Node.js 和 R。
项目介绍
Polars 是一个用 Rust 编写的分析型查询引擎,同时提供 DataFrame API 和 SQL。两种写法经过同一个优化器和执行引擎,也可以在同一条查询里混用 readme:L47-L64。它面向需要在本地处理中大型数据集的数据分析人员、工程师,以及使用 Python、Rust、Node.js 或 R 的开发者。
主要特点:
- 多线程、向量化执行,可选 NVIDIA GPU 加速。
- 惰性查询,执行前统一优化。
- 超出内存的运算可以溢写到磁盘。
- 使用 Apache Arrow 列式格式,便于零拷贝互操作。
- 可通过 I/O 和表达式插件用原生代码扩展 readme:L60-L63。
快速使用
Python 是上手最快的入口。先安装:
pip install polars
再执行一段惰性查询:
import polars as pl
df = (
pl.scan_parquet("orders.parquet")
.filter(pl.col("status") == "shipped")
.group_by("customer_id")
.agg(
pl.col("amount").sum().alias("total"),
pl.len().alias("n_orders"),
)
.sort("total", descending=True)
.collect()
)
结果是一个按订单总额降序排列、每位客户一行的 DataFrame。scan_parquet 建立惰性扫描,过滤、聚合和排序会先优化再并行执行 readme:L67-L87。SQL 通过 pl.sql(...) 使用,返回的是普通 LazyFrame,可以继续接表达式方法 readme:L107-L123,更多用法见 SQL 用户指南。
安装与构建选项
除 pip install polars 外,可选依赖由 feature flags 控制,具体见安装指南。需要最新代码时可以从源码编译:安装 Rust、安装 maturin,然后在 py-polars 目录运行对应的 make build* 目标。这些目标在编译时间、运行性能和调试符号之间取舍;老 CPU 不支持 AVX2 时使用 LTS_CPU=1 readme:L144-L176。
使用约束
- 提供 Python、Rust、Node.js 和 R 的 API,但 Python 绑定包装的是名为
py-polars的独立 crate,而 Python 包名和模块名都叫polarsreadme:L144-L176。 - out-of-core 不覆盖所有操作,无法这样执行的查询会回退到内存引擎,仍可能超出可用内存 comment by ritchie46, 2022-12-22。
- GPU 加速是可选功能,且限于 NVIDIA GPU readme:L60-L63。
- 项目采用 MIT 许可证 readme:L192-L194。
HotRepo 点评
在 2026-11-11 的 Rust 日榜记录中,仓库有 40,316 个 Star、3,235 个 Fork,当天新增 17 个 Star,位列 Rust 日榜第 7。Hacker News 上围绕 1.0.0 发布的讨论认为它不只是 pandas 替代品,有评论者指出,在不得不转向 Spark 之前,纯内存处理能支撑的规模上限被不断推高 comment by andenacitelli, 2024-07-02。这与项目强调惰性优化和磁盘溢写、而不只是比拼基准速度的方向一致。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。