Apache Spark使用JDBC连接器写入MySQL(写入模式:忽略)未按预期执行

时间:2018-05-11 16:46:44

标签: mysql apache-spark apache-spark-sql spark-jdbc

我将我的表存储在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该怎么办?还有其他推荐的方法吗?

0 个答案:

没有答案