Parquet 格式不同压缩格式压缩率简单对比

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
复制代码
  • 文件大小对比

image-20210805102033055.png

  • 压缩率对比

    以输出的 csv 文件大小为初始大小,统计各个压缩格式的压缩率。

image-20210805102110619.png

3 总结

在不指定压缩方式时(none, uncompressed)的情况下生成的 Parquet 文件也比纯文本文件(csv)要小很多。使用 gzip 压缩比 snappy 压缩时具有更高的压缩比,在集群存储空间紧张的情况下,可以考虑使用 gzip 进行数据压缩。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享