在JDBC Scala Postgresql上执行更新
大家好,我想在postgresql中基于dataframe更新一个表,但是没有发生任何事情。谢谢在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
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")
})