Polars:用 Rust 重写 DataFrame,快到离谱
·
Polars:用 Rust 重写 DataFrame,快到离谱
Polars 在 GitHub 上已经拿到 38,661 Star 了。
这是一个用 Rust 写的 DataFrame 查询引擎。如果你还在用 pandas 处理大规模数据,可能已经吃过内存爆掉的苦。Polars 就是冲着解决这个问题来的,速度更快、内存更省,API 还更干净。
1、 这玩意儿是干嘛的
Polars 只做一件事:让你用 DataFrame 的方式做数据分析,但比传统工具快一个数量级。
它支持两种执行模式。Eager 模式像 pandas,操作立即执行。Lazy 模式则会把你的查询攒起来,自动优化后再跑,省去很多中间计算。对于大于内存的数据集,它能用流式处理,250GB 的数据在笔记本上也能跑。
前端支持 Python、Rust、Node.js、R,还有 SQL。底层基于 Apache Arrow 列式格式,现代硬件上的 SIMD 指令和多核都能用起来。

2、 到底有多快
Polars 的 import 时间是 70ms。numpy 要 104ms,pandas 是 520ms。
这还只是启动速度。实际查询性能上,Polars 在 PDS-H 基准测试里常年排在最前面。它的查询引擎会自动做谓词下推、投影消除这些优化,你写的代码它会在背后改得更高效。
零依赖也是个亮点。装完就能用,不用拉一堆附属包。
3、 核心特性
- 惰性/即时执行两种模式
- 流式处理,内存不够也能跑
- 查询优化,自动改写成更高效的执行计划
- 多线程,CPU 核心能拉满
- SIMD 向量指令加速
- 表达式 API,链式调用写复杂逻辑很顺手

4、 安装使用
Python 用户直接 pip:
pip install polars
简单查询长这样:
import polars as pl
df = pl.read_csv("data.csv")
result = df.filter(pl.col("age") > 25).group_by("city").agg(pl.col("salary").mean())
Lazy 模式加个 .lazy() 就行:
df.lazy().filter(pl.col("age") > 25).collect()
内存不够的时候用流式:
df.lazy().filter(pl.col("age") > 25).collect(engine='streaming')
5、 适合哪些人
- 用 pandas 处理数据量上来后明显卡顿的数据分析师
- 需要高性能 DataFrame 操作的 Python/R 开发者
- 做 ETL 流水线、对执行速度和内存占用敏感的基础设施团队
Polars 不是什么新概念包装器,是从底层用 Rust 重新实现的查询引擎。如果你每天和数据打交道,值得一试。
占用敏感的基础设施团队
Polars 不是什么新概念包装器,是从底层用 Rust 重新实现的查询引擎。如果你每天和数据打交道,值得一试。
更多推荐


所有评论(0)