我有2个分区的数据框,并使用覆盖方法插入到postgres表中。
df.write \
.format("jdbc") \
.option("driver", POSTGRESQL_DRIVER) \
.option("url", url) \
.option("user", user) \
.option("password", password) \
.option("dbtable", "test_table") \
.mode("overwrite") \
.save()
分区向量:(0,1)
首先将分区0插入,然后是分区1,此处分区0记录已被表中的记录覆盖。仅分区1记录可用。
如何在不覆盖先前分区的情况下插入或保存两个分区?
答案 0 :(得分:0)
我可以在下面看到两个解决此问题的方法。
1)作为写操作的一部分,提供了另一个选项来截断表,然后追加,以便旧数据将被截断并追加新数据帧。每次您将只以这种方式获得新的数据集。
df.write \
.format("jdbc") \
.option("driver", POSTGRESQL_DRIVER) \
.option("url", url) \
.option("user", user) \
.option("password", password) \
.option("dbtable", "test_table") \
.option("truncate", True) \
.mode("append") \
.save()
2)作为spark 2.3的一部分,我们获得了新选项,可以仅截断特定分区,而不截断所有分区。如果您使用的是最新版本的Spark,则可以尝试使用此功能。
https://issues.apache.org/jira/browse/SPARK-20236
希望这会有所帮助。