如何在Rust中使用Polars读取Parquet文件并遍历行?
在Rust中使用Polars读取Parquet文件并遍历行
1. 添加依赖
首先在你的Cargo.toml中添加Polars及Parquet相关依赖,确保启用parquet特性:
[dependencies] polars = { version = "0.35", features = ["parquet", "fmt"] }
(注:版本号可根据当前最新稳定版调整,fmt特性用于方便打印行数据)
2. 读取Parquet文件为Polars DataFrame
使用ParquetReader从路径读取文件,返回一个DataFrame对象:
use polars::prelude::*; use std::error::Error; fn main() -> Result<(), Box<dyn Error>> { // 读取Parquet文件 let df = ParquetReader::from_path("your_file.parquet")? .finish()?; // 可选:打印DataFrame基本信息,确认读取成功 println!("{}", df); Ok(()) }
3. 遍历每一行数据
Polars提供了多种遍历行的方式,最直接的是使用iter_rows()方法:
// 接上面的代码,在读取df之后 for row in df.iter_rows() { // row是一个&[AnyValue<'_>],可以访问每个字段的值 println!("Row content: {:?}", row); // 示例:获取特定列的值(假设第一列是字符串,第二列是整数) if let (Some(AnyValue::Str(s)), Some(AnyValue::Int32(i))) = (row.get(0), row.get(1)) { println!("String column: {}, Int column: {}", s, i); } }
如果需要更类型安全的遍历,可以指定类型提取字段值:
// 示例:类型安全获取值 for row in df.iter_rows() { let name: &str = row.get(0).unwrap().try_extract()?; let age: i32 = row.get(1).unwrap().try_extract()?; println!("Name: {}, Age: {}", name, age); }
内容的提问来源于stack exchange,提问作者Test
相关产品推荐
相关产品推荐

