使用Spark写入外部表时如何使用GZIP压缩

时间:2019-04-27 07:17:54

标签: apache-spark pyspark gzip

我试图通过执行看起来像“插入到table_a(从table_b中选择*,to_date(created_at))”的SQL,使用spark将数据插入分区的蜂巢表中。

两个表均为Json格式,源数据为GZIPped,大小为1.2GB。但是由于spark不写入压缩文件,因此输出表的数据大小已变为34GB。

我已经尝试了以下配置,但似乎没有任何作用

sparkSession = (SparkSession
                .builder
                .appName('example-pyspark-read-and-write-from-hive')
                .enableHiveSupport()
                .config("hive.exec.dynamic.partition", "true")
                .config("hive.exec.dynamic.partition.mode", "nonstrict")
                .config("spark.hadoop.mapred.output.compress", "true")
                .config("spark.hadoop.mapred.output.compression.codec", "org.apache.hadoop.io.compress.GzipCodec")
                .config("spark.hadoop.mapred.output.compression.type", "BLOCK")
                .config("spark.sql.json.compression.codec","gzip")
                .getOrCreate())
sparkSession.sql("set json.compression=GZIP")
sparkSession.sql("set spark.sql.json.compression.codec=GZIP")
df_load = sparkSession.sql("insert into temp.serv_test_out (select *,to_date(from_utc_timestamp(from_unixtime(time_stamp DIV 1000), 'IST')), lpad(hour(from_utc_timestamp(from_unixtime(time_stamp DIV 1000), 'IST')),2,'0') from temp.serv_test)")
df_load.show()

我拥有的源数据很大,并且不希望分区表的数据大小大30倍。任何帮助将不胜感激。

0 个答案:

没有答案