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

我想做的是:

  • 选择一个4列行作为仅2列-1个键列col_0和其他col_信息作为以“|”作为分隔符连接的其他列
  • 按键列(列0)分组
  • 通过用“,”分隔符连接con_info列,聚合col_info
  • 插入到其他一些聚合表中
  • 因为,我现在假设col_0将是唯一的,因为我按它分组,令人惊讶的是,我得到了主键冲突错误:

    原因:java.sql.BatchUpdateException:违反主键约束“PK\u xxxx”。无法在对象“myschema.myaggtable”中插入重复键。重复的键值为(yyyy)


    表中是否已经存在可能导致问题的数据?您是否确实尝试找到重复的键?它们真的是一样的吗?
    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)