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压缩,根本没有改变输出文件的大小。
1条答案
按热度按时间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。