Parquet
加载或写入Parquet文件非常快速,因为Polars DataFrame在内存中的数据布局在许多方面与磁盘上的Parquet文件布局相似。
与CSV不同,Parquet是一种列式格式。这意味着数据是按列而不是按行存储的。这是一种更有效的数据存储方式,因为它可以实现更好的压缩和更快的数据访问。
读取
我们可以使用read_parquet函数将Parquet文件读入DataFrame中:
df = pl.read_parquet("docs/assets/data/path.parquet")
ParquetReader · 在功能 parquet 上可用
let mut file = std::fs::File::open("docs/assets/data/path.parquet").unwrap();
let df = ParquetReader::new(&mut file).finish().unwrap();
写入
df = pl.DataFrame({"foo": [1, 2, 3], "bar": [None, "bak", "baz"]})
df.write_parquet("docs/assets/data/path.parquet")
ParquetWriter · 在功能 parquet 上可用
let mut df = df!(
"foo" => &[1, 2, 3],
"bar" => &[None, Some("bak"), Some("baz")],
)
.unwrap();
let mut file = std::fs::File::create("docs/assets/data/path.parquet").unwrap();
ParquetWriter::new(&mut file).finish(&mut df).unwrap();
扫描
Polars 允许你扫描一个Parquet输入。扫描会延迟实际的文件解析,并返回一个称为LazyFrame的惰性计算持有者。
df = pl.scan_parquet("docs/assets/data/path.parquet")
scan_parquet · 可在功能 parquet 上使用
let args = ScanArgsParquet::default();
let lf = LazyFrame::scan_parquet("docs/assets/data/path.parquet", args).unwrap();
如果您想知道为什么这是可取的,您可以阅读更多关于这些Polars优化的信息 这里。
当我们扫描存储在云端的Parquet文件时,我们也可以应用谓词和投影下推。这可以显著减少需要下载的数据量。有关在云端扫描Parquet文件的更多信息,请参阅云存储。