我正在从Spark 2.1(使用df.write.insertInto(...)
插入外部蜂巢-实木复合地板表中。通过设置例如
spark.sql("SET spark.sql.parquet.compression.codec=GZIP")
我可以在SNAPPY,GZIP和未压缩之间切换。我可以验证文件大小(和文件名结尾)是否受这些设置影响。我得到一个名为例如的文件
part-00000-5efbfc08-66fe-4fd1-bebb-944b34689e70.gz.parquet
但是如果我使用分区的Hive表,此设置没有任何效果,文件大小始终相同。此外,文件名始终为
part-00000
现在如何在分区情况下更改(或至少验证)实木复合地板文件的压缩编解码器?
我的桌子是:
CREATE EXTERNAL TABLE `test`(`const` string, `x` int)
PARTITIONED BY (`year` int)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
)
STORED AS
INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
答案 0 :(得分:0)
在创建外部表时,我将像这样进行操作:
首先使用所需的压缩率编写镶木地板数据集:
df.write
.partitionBy("year")
.option("compression","<gzip|snappy|none>")
.parquet("<parquet_file_path>")
您可以像以前一样检查文件扩展名。 然后,您可以按照以下步骤创建外部表:
CREATE EXTERNAL TABLE `test`(`const` string, `x` int)
PARTITIONED BY (`year` int)
STORED AS PARQUET
LOCATION '<parquet_file_path>';
如果Hive中已经存在外部表,则只需运行以刷新表:
MSCK REPAIR TABLE test;