无法使用pyspark将数据帧写入Hive分区镶木地板表

时间:2019-05-27 15:50:04

标签: apache-spark-sql pyspark-sql parquet

我正在尝试将数据帧写入分区的配置单元表。配置单元表格式为镶木地板。

但是我无法将df写入Hive表。

我正在尝试将数据帧写入分区的配置单元表。配置单元表格式为镶木地板。

但是我无法将df写入Hive表。

Spark2.3和分区配置单元表

当我尝试将finaldf加载到配置单元分区表中时,出现以下错误

finaldf.write.mode("overwrite").format("parquet").partitionBy("mis_dt","country_codfe").saveAsTable("FinalTable")

错误:u'无法覆盖表架构。要读取的表架构也要从中读取;'

当我用谷歌搜索上述错误时,他们建议将df加载到temp表中,并加载到final蜂巢表中。我尝试了该选项,但再次失败,并出现了其他错误。

finaldf.createOrReplaceTempView('tmpTable') 
final= spark.read.table('tmpTable') 
final.write.mode("overwrite").insertInto("Finaltable")

错误:创建的分区数为7004,大于1000。

但是我不认为我们有那么多分区。

finaldf.write.mode(“ overwrite”)。format(“ parquet”)。partitionBy(“ mis_dt”,“ country_codfe”)。saveAsTable(“ FinalTable”)

第二个选项:

finaldf.createOrReplaceTempView('tmpTable')
final= spark.read.table('tmpTable') 
final.write.mode("overwrite").insertInto("Finaltable")

我希望使用spark 2.3将数据写入蜂巢拼花文件格式表中

finaldf.write.mode("overwrite").format("parquet").partitionBy("mis_dt","cntry_cde").saveAsTable("finaltable")

1 个答案:

答案 0 :(得分:0)

spark.sql.sources.partitionOverwriteMode在Spark> = 2.3中引入

sparkConf.set("spark.sql.sources.partitionOverwriteMode", "dynamic")    
sparkConf.set("hive.exec.dynamic.partition", "true")
sparkConf.set("hive.exec.dynamic.partition.mode", "nonstrict")

使用以下代码-

final.write.mode(SaveMode.Overwrite).insertInto("table")

注意:该表应在带有分区的Hive中创建。