我有一个使用snappy压缩写入parquet文件的Spark作业。其中一个parquet列是重复的INT64。
从Spark 2.2和Parquet 1.8.2升级到Spark 3.1.1和Parquet 1.10.1时,我发现压缩比严重下降。
例如,对于此文件(使用Spark 2.2保存),我有以下元数据: 这个文件。
使用Spark 3.1读取并将其保存为Parquet格式后,我得到以下元数据,而Parquet部分的大小从76MB增加到124MB:
请注意,压缩比从
尝试查找在 Spark 或 Parquet 版本之间更改的任何配置。我唯一找到的是
以下是我使用两个设置的 ParquetOutputFormat 配置:
从Spark 2.2和Parquet 1.8.2升级到Spark 3.1.1和Parquet 1.10.1时,我发现压缩比严重下降。
例如,对于此文件(使用Spark 2.2保存),我有以下元数据: 这个文件。
creator: parquet-mr version 1.8.2 (build c6522788629e590a53eb79874b95f6c3ff11f16c)
extra: org.apache.spark.sql.parquet.row.metadata = {"type":"struct","fields":[{"name":"numbers","type":{"type":"array","elementType":"long","containsNull":true},"nullable":true,"metadata":{}}]}
file schema: spark_schema
--------------------------------------------------------------------------------
numbers: OPTIONAL F:1
.list: REPEATED F:1
..element: OPTIONAL INT64 R:1 D:3
row group 1: RC:186226 TS:163626010 OFFSET:4
--------------------------------------------------------------------------------
numbers:
.list:
..element: INT64 SNAPPY DO:0 FPO:4 SZ:79747617/163626010/2.05 VC:87158527 ENC:RLE,PLAIN_DICTIONARY ST:[min: 4, max: 1967324, num_nulls: 39883]
使用Spark 3.1读取并将其保存为Parquet格式后,我得到以下元数据,而Parquet部分的大小从76MB增加到124MB:
creator: parquet-mr version 1.10.1 (build a89df8f9932b6ef6633d06069e50c9b7970bebd1)
extra: org.apache.spark.version = 3.1.1
extra: org.apache.spark.sql.parquet.row.metadata = {"type":"struct","fields":[{"name":"numbers","type":{"type":"array","elementType":"long","containsNull":true},"nullable":true,"metadata":{}}]}
file schema: spark_schema
--------------------------------------------------------------------------------
numbers: OPTIONAL F:1
.list: REPEATED F:1
..element: OPTIONAL INT64 R:1 D:3
row group 1: RC:186226 TS:163655597 OFFSET:4
--------------------------------------------------------------------------------
numbers:
.list:
..element: INT64 SNAPPY DO:0 FPO:4 SZ:129657160/163655597/1.26 VC:87158527 ENC:RLE,PLAIN_DICTIONARY ST:[min: 4, max: 1967324, num_nulls: 39883]
请注意,压缩比从
2.05
降至 1.26
。尝试查找在 Spark 或 Parquet 版本之间更改的任何配置。我唯一找到的是
parquet.writer.max-padding
从 0
更改为 8MB
,但即使将此配置更改回 0
,我仍然得到相同的结果。以下是我使用两个设置的 ParquetOutputFormat 配置:
Parquet block size to 134217728
Parquet page size to 1048576
Parquet dictionary page size to 1048576
Dictionary is on
Validation is off
Writer version is: PARQUET_1_0
Maximum row group padding size is 0 bytes
Page size checking is: estimated
Min row count for page size check is: 100
Max row count for page size check is: 10000
我希望能够得到任何指导。
谢谢!
更新
检查了使用spark 2.2的snappy 1.1.2.6版本的spark 3,压缩比看起来不错。 将进一步研究此问题,并发布我的发现。