如何更改通过Spark写入的文件的ZSTD压缩级别?

yftpprvb  于 2022-11-16  发布在  Apache
关注(0)|答案(1)|浏览(909)

Spark文档中规定默认的zstd压缩级别为1。https://spark.apache.org/docs/latest/configuration.html
我在 spark-defaults.conf 中将该属性设置为不同的值,
在代码中

val conf = new SparkConf(false)
conf.set("spark.io.compression.zstd.level", "22")
val spark = SparkSession.builder.config(conf).getOrCreate()
..

阅读相同的输入并多次以parquet格式保存/写入它并使用zstd压缩,根本没有改变输出文件的大小。

wixjitnu

wixjitnu1#

参数spark.io.compression.zstd.level是关于用来压缩中间文件的编解码器-序列化RDD,shuffle,broadcast,checkpoint。在大多数情况下,唯一重要的是压缩速度,所以默认的1是最好的选择(也应该将spark.io.compression.codec设置为zstd,这个参数才有效)。
遗憾的是,Spark中没有为spark.sql.parquet.compression.codec指定的Parquet编解码器指定压缩级别的能力。
作为一种解决方法,可以使用arrow项目中的Parquet实现(直接在C++中,或者通过pyarrow / go / etc;它允许为每个列的codec指定compression_level,以及默认的compression_level值),以便在将数据写入仓库之前重新打包数据。
不幸的是,arrow-rs Parquet实现不允许指定compression_level。但幸运的是,parquet2被用于arrow2(箭头的无变形 rust 实现)-does

相关问题