1 目标
比较 Parquet 格式在不同的压缩算法情况下,生成文件的压缩比。
复制代码
2 操作
读取 Hive 数据表中一定量的数据,分别指定不同的压缩格式写出 Parquet 至 Hdfs,再进行压缩率的比较。
复制代码
2.1 主要代码
from pyspark.sql import SparkSession
if __name__ == '__main__':
# 初始化 SparkSession
session = SparkSession.builder.getOrCreate()
# 读取数据
data_frame = session.sql("select * from ods.xxx where name = 'xxx'").repartition(100)
data_frame.cache()
# 按照不同的压缩格式写出 [ csv, none, uncompressed, snappy, gzip ]
data_frame.write.mode("overwrite").csv("/user/sun/output/parquet_test/csv")
data_frame.write.mode("overwrite").option("compression", "none").parquet("/user/sun/output/parquet_test/none")
data_frame.write.mode("overwrite").option("compression", "uncompressed").parquet("/user/sun/output/parquet_test/uncompressed")
data_frame.write.mode("overwrite").option("compression", "snappy").parquet("/user/sun/output/parquet_test/snappy")
data_frame.write.mode("overwrite").option("compression", "gzip").parquet("/user/sun/output/parquet_test/gzip")
data_frame.unpersist()
session.stop()
复制代码
# 任务提交代码
spark-submit --master yarn --deploy-mode cluster --queue queueD --driver-memory 10G --num-executors 10 --executor-cores 2 --executor-memory 10G --name Parquet_test test.py
复制代码
2.2 数据对比
$ hadoop fs -du -h /user/sunkangkang/output/parquet_test
18.7 G 56.1 G /user/sunkangkang/output/parquet_test/csv
1.1 G 3.2 G /user/sunkangkang/output/parquet_test/gzip
1.4 G 4.3 G /user/sunkangkang/output/parquet_test/snappy
1.6 G 4.9 G /user/sunkangkang/output/parquet_test/none
1.6 G 4.9 G /user/sunkangkang/output/parquet_test/uncompressed
复制代码
- 文件大小对比
-
压缩率对比
以输出的 csv 文件大小为初始大小,统计各个压缩格式的压缩率。
3 总结
在不指定压缩方式时(none, uncompressed)的情况下生成的 Parquet 文件也比纯文本文件(csv)要小很多。使用 gzip 压缩比 snappy 压缩时具有更高的压缩比,在集群存储空间紧张的情况下,可以考虑使用 gzip 进行数据压缩。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END