总览
今天碰到了一个spark sql 压缩的问题,所以今天来讲一下spark的压缩
一切参考spark2.4.1版本来讲解
spark 压缩分为3块,rdd压缩 broadcast压缩 和spark sql的压缩
1、rdd 压缩
spark.rdd.compress
Whether to compress serialized RDD partitions (e.g. for StorageLevel.MEMORY_ONLY_SER in Java and Scala or StorageLevel.MEMORY_ONLY in Python). Can save substantial space at the cost of some extra CPU time. Compression will use spark.io.compression.codec.
用来压缩rdd的分区,默认值为false。用来一想也是,rdd的分区缓存在内存中,我们本身就是想使用内存来加速,压缩和相应的解压缩反而浪费了时间。
默认的压缩格式是用的spark.io.compression.codec配置的值
2、broadcast压缩
spark.broadcast.compress
Whether to compress broadcast variables before sending them. Generally a good idea. Compression will use spark.io.compression.codec.
压缩发送的广播变量,默认压缩。压缩格式使用spark.io.compression.codec 配置的值。
想想也合理,压缩广播变量,可以大大的节省带宽和IO,节省效率。
3、spark sql中的压缩
spark sql中的压缩指的比如spark sql建表 spark sql写文件等操作。
这块的配置在官方文档没有,这边顺带说声spark sql 想查看相关配置应该怎么做。
打开spark shell 使用
spark.sql(“SET -v”).write.saveAsTable(“demo”); 把这些spark sql的配置直接存成一张表也方便查看,不然80多个有点多。
spark.sql.parquet.compression.codec
默认值 snappy Acceptable values include: none, uncompressed, snappy, gzip, lzo, brotli, lz4, zstd.
spark.sql.orc.compression.codec snappy
默认值 snappy Acceptable values include: none, uncompressed, snappy, zlib, lzo
上面两个配置说的就是写parquet 和orc 文件默认都是使用snappy格式压缩的。包括可以接受的参数值。