在JDBC Scala Postgresql上执行更新

在JDBC Scala Postgresql上执行更新,sql,scala,apache-spark,dataframe,jdbc,Sql,Scala,Apache Spark,Dataframe,Jdbc,大家好,我想在postgresql中基于dataframe更新一个表,但是没有发生任何事情。谢谢 val local_pos = spark.load("jdbc", Map("url" -> url, "dbtable" -> "pos")).select("id", "name") val join = local_pos.join(TMP_SITE, local_pos("id") === TMP_SITE("SITE"), "inner") val t

大家好,我想在postgresql中基于dataframe更新一个表,但是没有发生任何事情。谢谢

val local_pos = spark.load("jdbc", Map("url" -> url, "dbtable" -> "pos")).select("id", "name")
      val join = local_pos.join(TMP_SITE, local_pos("id") === TMP_SITE("SITE"), "inner")
      val temp = join.withColumn("changes", when(trim($"LIBELLE") === trim($"name"), lit("nothing")).otherwise("need an update"))

      //get row that need update
      val dataToBeUpdated = temp.filter($"changes" === "need an update")
      classOf[org.postgresql.Driver]
        val conn = DriverManager.getConnection(url)
        //   Configure to be Read Only
        val statement = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)

        val result = dataToBeUpdated.collect().map { row =>
                  println("update pos set name = "+ row.getString(3).trim()+ "where id =" + row.getLong(0).toString() +";")
                val rs = statement.executeUpdate("update pos set name = "+ row.getString(3).trim()+ "where id =" + row.getLong(0).toString() +";")
                  println("tuple with " +  row.getLong(0) + "has been updateed")

        }
        println(result)

非常感谢,任何帮助都将不胜感激

请编辑您的问题并重新格式化。我想我会编辑它,但是现在它的质量很低。你写了“配置为只读”,然后你尝试更新。你确定这是对的吗?@T.Gawęda我刚刚接触过这个,有什么帮助吗?我这么做了,因为我已经在删除请求中使用了它,有什么帮助吗?谢谢
val local_pos = spark.load("jdbc", Map("url" -> url, "dbtable" -> "pos")).select("id", "name")

val join = local_pos.join(TMP_SITE, local_pos("id") === TMP_SITE("SITE"), "inner")

val temp = join.withColumn("changes", when(trim($"LIBELLE") === trim($"name"), lit("nothing")).otherwise("need an update"))
//get row that need update
val dataToBeUpdated = temp.filter($"changes" === "need an update")



classOf[org.postgresql.Driver]
val connection = DriverManager.getConnection(url)
dataToBeUpdated.collect().map(row =>

  {
    val ps = connection.prepareStatement("UPDATE pos SET name = ? WHERE id = ? ");
    ps.setString(1, row.getString(3));
    ps.setLong(2, row.getLong(0));
    ps.executeUpdate();
    println("update done successfully")
  })