spark & 文件压缩

核能气质少年 提交于 2019-12-08 19:24:43

hdfs中存储的文件一般都是多副本存储,对文件进行压缩,不仅可以节约大量空间,适当的存储格式还能对读取性能有非常大的提升。

文本文件压缩

bzip2

压缩率最高,压缩解压速度较慢,支持split。

import org.apache.hadoop.io.compress.BZip2Codec
rdd.saveAsTextFile("codec/bzip2",classOf[BZip2Codec])

snappy

json文本压缩率 38.2%,压缩和解压缩时间短。

import org.apache.hadoop.io.compress.SnappyCodec
rdd.saveAsTextFile("codec/snappy",classOf[SnappyCodec])

gzip

压缩率高,压缩和解压速度较快,不支持split,如果不对文件大小进行控制,下次分析可能可能会造成效率低下的问题。
json文本压缩率23.5%,适合使用率低,长期存储的文件。

import org.apache.hadoop.io.compress.GzipCodec
rdd.saveAsTextFile("codec/gzip",classOf[GzipCodec])

parquet文件压缩

parquet为文件提供了列式存储,查询时只会取出需要的字段和分区,对IO性能的提升非常大,同时占用空间较小,即使是parquet的uncompressed存储方式也比普通的文本要小的多。

spark中通过sqlContext.write.parquet("path")
对parquet文件进行存储,默认使用的gzip压缩方式。

可以通过spark.sql.parquet.compression.codec参数或是在代码中进行修改。

parquet存储提供了lzo,gzip,snappy,uncompressed四种方式。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!