在 Rust 中使用 Polars 编写 Parquet 文件时控制压缩级别
Control the compression level when writing Parquet files using Polars in Rust
我发现默认情况下 polars 的输出 Parquet 文件比 Spark 输出的 Parquet 文件大大约 35%(在相同的数据上)。默认情况下,Spark 使用 snappy 进行压缩,如果我将 ParquetCompression 切换为 polars 中的 snappy,它也无济于事。我想知道这是因为极地使用更保守的压缩比吗?有什么办法可以控制 polars 中 Parquet 文件的压缩级别?我查看了polars的文档,似乎只有Zstd接受一个ZstdLevel(甚至不确定它是否是压缩级别)。
下面是我使用 snappy 压缩将 DataFrame 写入 Parquet 文件的代码。
let f = File::create("j.parquet").expect("Unable to create the file j.parquet!");
let mut bfw = BufWriter::new(f);
let pw = ParquetWriter::new(bfw).with_compression(ParquetCompression::Snappy);
pw.finish(&mut df);
这在 rust polars
中(尚)不可能。它可能会出现在 arrow2
的下一个版本中,然后我们也可以在 polars 中实现它。
如果您想要 python polars
中的该功能,您可以利用 pyarrow
来达到此目的。 polars
与 pyarrow
的副本互操作为零。
我发现默认情况下 polars 的输出 Parquet 文件比 Spark 输出的 Parquet 文件大大约 35%(在相同的数据上)。默认情况下,Spark 使用 snappy 进行压缩,如果我将 ParquetCompression 切换为 polars 中的 snappy,它也无济于事。我想知道这是因为极地使用更保守的压缩比吗?有什么办法可以控制 polars 中 Parquet 文件的压缩级别?我查看了polars的文档,似乎只有Zstd接受一个ZstdLevel(甚至不确定它是否是压缩级别)。
下面是我使用 snappy 压缩将 DataFrame 写入 Parquet 文件的代码。
let f = File::create("j.parquet").expect("Unable to create the file j.parquet!");
let mut bfw = BufWriter::new(f);
let pw = ParquetWriter::new(bfw).with_compression(ParquetCompression::Snappy);
pw.finish(&mut df);
这在 rust polars
中(尚)不可能。它可能会出现在 arrow2
的下一个版本中,然后我们也可以在 polars 中实现它。
如果您想要 python polars
中的该功能,您可以利用 pyarrow
来达到此目的。 polars
与 pyarrow
的副本互操作为零。