如何使用Rust with Delta-rs查询DeltaLake表中的数据。在我的示例中,数据位于多个 parquet 文件中。谢谢你能不能给予我一个小代码,是从你的身边工作?
6jjcrrmo1#
你需要Polars或者Datafusion来完成这个任务,这里有一个简单的方法:
use deltalake::delta::open_table; use polars::prelude::*; #[tokio::main] async fn main() { let lf = read_delta_table("delta_test_5m").await; println!("{:?}", lf.select([count()]).collect()); } async fn read_delta_table(path: &str) -> LazyFrame { let dt = open_table(path).await.unwrap(); let files = dt.get_files(); let mut df_collection: Vec<DataFrame> = vec![]; for file_path in files.into_iter() { let full_path = format!("{}/{}", path, file_path.as_ref()); let mut file = std::fs::File::open(full_path).unwrap(); let df = ParquetReader::new(&mut file).finish().unwrap(); df_collection.push(df); } let empty_head = df_collection[0].clone().lazy().limit(0); df_collection.into_iter().fold(empty_head, |acc, df| concat([acc, df.lazy()], false, false).unwrap()) }
这段代码首先获取要考虑最新版本增量表的 parquet 文件列表,然后为每个文件创建一个Dataframe,最后将这些Dataframe连接起来得到最终的Dataframe。请注意,Polars在Python中提供了这个开箱即用的特性:
import polars as pl print(pl.read_delta("path_to_delta"))
我没有找到如何阅读三角洲直接通过极地在铁 rust ,但它应该很快添加,我猜。
1条答案
按热度按时间6jjcrrmo1#
你需要Polars或者Datafusion来完成这个任务,这里有一个简单的方法:
这段代码首先获取要考虑最新版本增量表的 parquet 文件列表,然后为每个文件创建一个Dataframe,最后将这些Dataframe连接起来得到最终的Dataframe。
请注意,Polars在Python中提供了这个开箱即用的特性:
我没有找到如何阅读三角洲直接通过极地在铁 rust ,但它应该很快添加,我猜。