Polars Rust 库:完整使用指南
Polars 是一个用 Rust 编写的高性能 DataFrame 数据处理库。它提供了类似 pandas 的 API,但在速度和内存效率上远超后者。与 pandas 受限于单线程执行和内存消耗不同,Polars 从设计之初就支持多线程运行,并通过惰性计算(Lazy API)优化查询计划。
Polars 的核心目标是让用户能够在单台机器上处理从数百 MB 到数 TB 的大规模数据,而无需借助 Spark 等分布式系统。这得益于其高效的内存管理(零拷贝、基于 Apache Arrow 的后端)、向量化操作和自动并行化。对于 Rust 开发者来说,Polars 并非 Python 库的简单封装,而是充分利用 Rust 语言特性的原生库:内存安全、类型系统和卓越性能。
该库提供两种 API:Eager(即时计算)和 Lazy(惰性计算)。Eager API 适合交互式探索和小型数据集,能立即看到结果。Lazy API 则允许构建查询计划,经过优化后一次性执行,这对于复杂转换和大数据场景至关重要。Polars 还支持 CSV、Parquet、JSON、IPC(Arrow)格式以及通过 SQL 连接数据库。
安装方法
要在 Rust 项目中添加 Polars,需在 Cargo.toml 文件中添加依赖:
[dependencies]
polars = "0.44.0" # 请查看 crates.io 上的最新版本
如果需要额外功能(如字符串正则表达式、日期处理或 SQL 集成),可使用特性(features):
[dependencies]
polars = { version = "0.44.0", features = ["lazy", "strings", "dtype-date", "dtype-datetime", "sql", "parquet", "csv"] }
主要特性说明:
lazy— 惰性 API(生产环境必备)strings— 字符串处理方法(contains、replace、extract)dtype-date、dtype-datetime— 日期类型支持sql— SQL 接口parquet— Parquet 读写csv— CSV 读写is_in、rank、moment— 其他实用方法
添加依赖后,运行:
cargo build
快速上手
以下是一个创建 DataFrame 并执行简单查询的最小示例:
use polars::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 从向量创建 DataFrame
let df = df! [
"name" => &["Alice", "Bob", "Charlie"],
"age" => &[25, 30, 35],
"salary" => &[50000, 60000, 70000]
]?;
println!("原始 DataFrame:\n{:?}", df);
// 过滤:年龄大于 28 岁
let filtered = df.clone().lazy()
.filter(col("age").gt(lit(28)))
.collect()?;
println!("过滤结果 (age > 28):\n{:?}", filtered);
// 聚合:计算平均薪资
let avg_salary = df.clone().lazy()
.select([col("salary").mean().alias("avg_salary")])
.collect()?;
println!("平均薪资:\n{:?}", avg_salary);
Ok(())
}
这段代码创建了一个包含三列的数据表,按年龄过滤行,并计算平均薪资。注意这里使用了 lazy()——即使是简单操作,也推荐使用惰性 API 以获得更好的性能。