我正在使用Spark将Hadoop和Hive中的数据以parquet格式写入。我希望启用压缩,但我只能找到两种常用的压缩类型 - snappy和Gzip。Parquet是否支持其他压缩类型,如Deflate和lzo?
我正在使用Spark将Hadoop和Hive中的数据以parquet格式写入。我希望启用压缩,但我只能找到两种常用的压缩类型 - snappy和Gzip。Parquet是否支持其他压缩类型,如Deflate和lzo?
Apache Parquet支持的压缩类型在parquet-format
仓库中指定:
/**
* Supported compression algorithms.
*
* Codecs added in 2.4 can be read by readers based on 2.4 and later.
* Codec support may vary between readers based on the format version and
* libraries available at runtime. Gzip, Snappy, and LZ4 codecs are
* widely available, while Zstd and Brotli require additional libraries.
*/
enum CompressionCodec {
UNCOMPRESSED = 0;
SNAPPY = 1;
GZIP = 2;
LZO = 3;
BROTLI = 4; // Added in 2.4
LZ4 = 5; // Added in 2.4
ZSTD = 6; // Added in 2.4
}
Snappy和Gzip是最常用的两种压缩方式,并且被所有实现支持。LZ4和ZSTD比前两者产生更好的结果,但是它们是该格式的一个相对较新的补充,因此只有在某些实现的更新版本中才支持它们。
从 Spark源代码,分支2.1 中:
您可以为写入Parquet文件设置以下特定于Parquet的选项:
compression
(默认值为spark.sql.parquet.compression.codec
中指定的值):保存到文件时要使用的压缩编解码器。这可以是已知的不区分大小写的缩写名称之一(none
,snappy
,gzip
和lzo
)。
这将覆盖spark.sql.parquet.compression.codec
...
总体支持的压缩方式包括:none
、uncompressed
、snappy
、gzip
、lzo
、brotli
、lz4
和 zstd