我将我的表以 ID 作为主键存储在 MySQL 中。我想使用 Spark 写入 Mysql,其中它忽略数据框中已经存在于 Mysql 中的行(基于主键)并且只写入新的行集。
ID (PK) | Name | Description
1 | A | Something1
2 | B | Something2
当我尝试使用以下内容将 Spark Dataframe(包含 ID 3 和 4)写入此表时SaveMode.Append
:
val prop = new java.util.Properties
prop.setProperty("driver", "com.mysql.jdbc.Driver")
prop.setProperty("user", "username")
prop.setProperty("password", "XXX")
dataFrame
.write
.mode(SaveMode.Append)
.jdbc(jdbc:mysql://XXXXX:3306/db_name,"table_name",prop)
以下是我实现的结果:
ID (PK) | Name | Description
1 | A | Something1
2 | B | Something2
3 | C | Something3
4 | D | Something4
但是,当我使用SaveMode.Ignore
(ID 为 4、5、6)时,整个数据帧写入都会被忽略,而不仅仅是 ID 4 会被忽略。
这种行为正常吗?如果我想ID 5 and 6
在数据框包含时存储ID 4, 5 and 6
怎么办?还有其他推荐的方法吗?