Rust中如何实现Arrow RecordBatch与Polars DataFrame互转?
Rust中Arrow RecordBatch与Polars DataFrame高效互转方案
由于Polars底层基于Arrow构建,二者的互转可以通过Polars提供的原生方法实现零拷贝/极低开销的转换,无需额外序列化操作。
1. RecordBatch 转 Polars DataFrame
直接使用DataFrame::from_record_batch方法,该方法会直接复用Arrow的内存结构,没有数据复制。
示例代码:
use arrow::record_batch::RecordBatch; use polars::frame::DataFrame; fn batch_to_df(batch: RecordBatch) -> polars::prelude::Result<DataFrame> { DataFrame::from_record_batch(batch) }
2. Polars DataFrame 转 RecordBatch
使用DataFrame::to_record_batch方法,同样直接暴露底层Arrow数据结构,实现高效转换。
示例代码:
use arrow::record_batch::RecordBatch; use polars::frame::DataFrame; fn df_to_batch(df: &DataFrame) -> polars::prelude::Result<RecordBatch> { df.to_record_batch() }
关键注意事项
- 确保Polars与Arrow的版本兼容,建议在
Cargo.toml中锁定二者的兼容版本,避免因依赖版本差异导致转换失败。 - Polars特有的数据类型(如扩展的列表类型)会自动映射为对应的Arrow标准类型,无需手动处理。
内容的提问来源于stack exchange,提问作者Nikhil Garg
相关产品推荐
相关产品推荐

