我试图使用pyspark覆盖hive表的特定分区,但每次我试图这样做时,所有其他分区都被擦除。我通过几个帖子在这里关于这个和实施的步骤,但似乎我仍然得到和错误。我使用的代码是
spark.conf.set("spark.sql.sources.partitionOverwriteMode", "dynamic")
spark.conf.set("hive.exec.dynamic.partition", "true")
spark.conf.set("hive.exec.dynamic.partition.mode", "nonstrict")
df.write.format('parquet').mode('overwrite').partitionBy('col1').option("partitionOverwriteMode", "dynamic").saveAsTable(op_dbname+'.'+op_tblname)
最初分区是col1=m和col1=n,当我试图只覆盖col1=m分区时,它也擦除了col1=n。
Spark版本为2.4.4
谢谢你的帮助。
经过多次尝试和错误,这是我尝试的方法
spark.conf.set("spark.sql.sources.partitionOverwriteMode", "dynamic")
op_df.write.format(op_fl_frmt).mode(operation_mode).option("partitionOverwriteMode", "dynamic").insertInto(op_dbname+'.'+op_tblname,overwrite=True)
当我尝试使用saveAsTable时,无论我做什么,它总是擦去所有的值。并且只设置标记"spark.sql.sources"。partitionOverwriteMode' to dynamic似乎不起作用。因此,使用insertInto和其中的覆盖标志来实现所需的输出。