我将我的表存储在MySQL中,并将ID作为主键。 我想使用Spark写入Mysql,它忽略了Mysql中已存在的数据帧中的行(基于主键),并且只写入新的行集。
ID (PK) | Name | Description
1 | A | Something1
2 | B | Something2
当我尝试使用以下SaveMode.Append
将Spark数据帧(包含ID 3和4)写入此表时:
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
该怎么办?还有其他推荐的方法吗?