Scala Apache Spark复制密钥,即使在groupBy和aggregate之后
我想做的是:Scala Apache Spark复制密钥,即使在groupBy和aggregate之后,scala,apache-spark,jdbc,apache-spark-sql,Scala,Apache Spark,Jdbc,Apache Spark Sql,我想做的是: 选择一个4列行作为仅2列-1个键列col_0和其他col_信息作为以“|”作为分隔符连接的其他列 按键列(列0)分组 通过用“,”分隔符连接con_info列,聚合col_info 插入到其他一些聚合表中 因为,我现在假设col_0将是唯一的,因为我按它分组,令人惊讶的是,我得到了主键冲突错误: 原因:java.sql.BatchUpdateException:违反主键约束“PK\u xxxx”。无法在对象“myschema.myaggtable”中插入重复键。重复的键值为(yyy
表中是否已经存在可能导致问题的数据?您是否确实尝试找到重复的键?它们真的是一样的吗?
col\u 0
Save mode is append的类型是什么,请用SaveMode.Overwrite试试。键可能存在于表中,因为@Shaido已经在上面进行了注释。我已经选择了选项(“truncate”、“true”),它应该在追加数据之前截断表。哦,我误解了truncate选项。谢谢,我会试试看结果。
val invDF = spark.read.jdbc(
jdbcUrl,
"myschema.mytable",
connectionProperties
)
val date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())
val agged = invDF
.select($"col_0", concat_ws("|", $"col_1", $"col_2", $"col_3") as "col_info")
.groupBy($"col_0")
.agg(concat_ws(",", collect_list($"col_info")) as "col_info")
.select($"col_0", $"col_info", lit(date) as "modified_ts")
agged.write
.option("truncate", "true")
.mode(SaveMode.Append)
.jdbc(jdbcUrl, "myschema.myaggtable", connectionProperties)