使用 pyspark 插入镶木地板文件时,Hive 表需要对每个新分区进行“修复”
Posted
技术标签:
【中文标题】使用 pyspark 插入镶木地板文件时,Hive 表需要对每个新分区进行“修复”【英文标题】:Hive table requires 'repair' for every new partitions while inserting parquet files using pyspark 【发布时间】:2021-10-19 14:13:59 【问题描述】:我的 spark conf 为:
sparkConf.set("spark.sql.sources.partitionOverwriteMode", "dynamic")
sparkConf.set("hive.exec.dynamic.partition", "true")
sparkConf.set("hive.exec.dynamic.partition.mode", "nonstrict")
我正在使用 spark 上下文将 parquet 文件写入 hdfs 位置:
df.write.partitionBy('asofdate').mode('append').parquet('parquet_path')
在 hdfs 位置,镶木地板文件存储为“asofdate”,但在 hive 表中,我必须每天执行“MSCK REPAIR TABLE
【问题讨论】:
【参考方案1】:最好是integrate hive with spark 让你的工作更轻松。
在 hive-spark 集成设置后,您可以在创建 SparkSession 时启用 hive 支持。
spark = SparkSession.builder.enableHiveSupport().getOrCreate()
现在您可以从 spark 访问 hive 表。 您可以从 spark 本身运行修复命令。
spark.sql("MSCK REPAIR TABLE <tbl_name>")
我建议直接将数据帧写为蜂巢表,而不是将其写入镶木地板并进行修复表。
df.write.partitionBy("<partition_column>").mode("append").format("parquet").saveAsTable("<table>")
【讨论】:
我的流媒体服务每 1 小时生成 100> 个 parquet 文件。因此,每小时运行修复表可能会产生开销。而且我还需要将镶木地板文件保存到 hdfs 位置。以上是关于使用 pyspark 插入镶木地板文件时,Hive 表需要对每个新分区进行“修复”的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spark 将镶木地板文件加载到 Hive 表中?