使用SaveMode将Spark Dataframe写入MySQL,并附加重复记录

时间:2018-08-28 06:43:30

标签: apache-spark

尝试写入现有的MySQL表中,可能包含一些重复的记录。

df.write
    .mode(SaveMode.Append)
    .jdbc(jdbcUrl, db_table, connectionProperties)

我想要的是“插入忽略”。但是似乎SaveMode.Append不能容忍重复项。 SaveMode.Ignore将不起作用,因为它将忽略整个表。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

一个众所周知的问题。

在某些较小的情况下,我需要UPSert to mySQL。

在这种情况下,我所做的是

  1. 在SPARK中处理并将结果保存到tempview或在Dataframe / DataSet中处理结果。
  2. 从第1步保存到临时的mySQL表中。
  3. 在SPARK上执行mutate语句,然后在mySQL环境中以及在mySQL环境中执行UPSert,从而从mySQL中的临时表到最终表。

那是我得到的最好的。还有其他方法,但这是一种这样的方法。

我说的是通用术语,因此对于mySQL,因为没有UPSert,所以我使用了这种方法:

insert into t1(a, b, c)
select d, e, f from t2
on duplicate key update b = e, c = f;

通过mutate语句。并不是很SPARK,但是好吧,我们有时不得不做!