Pyspark Dataframe插入具有覆盖并且具有多个分区

时间:2019-07-17 09:55:39

标签: postgresql pyspark apache-spark-sql

我有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记录可用。

如何在不覆盖先前分区的情况下插入或保存两个分区?

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

希望这会有所帮助。