Postgresql 如何将spark数据帧写入Postgres DB

Postgresql 如何将spark数据帧写入Postgres DB,postgresql,scala,apache-spark,apache-spark-sql,spark-dataframe,Postgresql,Scala,Apache Spark,Apache Spark Sql,Spark Dataframe,我使用Spark 1.3.0 假设我在Spark中有一个数据帧,我需要将它存储到64位ubuntu机器上的Postgres DB(postgresql-9.2.18-1-linux-x64)。 我还使用postgresql9.2jdbc41.jar作为连接到postgres的驱动程序 我能够使用以下命令从postgres DB读取数据 import org.postgresql.Driver val url="jdbc:postgresql://localhost/postgres?user=u

我使用Spark 1.3.0 假设我在Spark中有一个数据帧,我需要将它存储到64位ubuntu机器上的Postgres DB(postgresql-9.2.18-1-linux-x64)。 我还使用postgresql9.2jdbc41.jar作为连接到postgres的驱动程序

我能够使用以下命令从postgres DB读取数据

import org.postgresql.Driver
val url="jdbc:postgresql://localhost/postgres?user=user&password=pwd"
val driver = "org.postgresql.Driver"

val users = {
  sqlContext.load("jdbc", Map(
    "url" -> url,
    "driver" -> driver,
    "dbtable" -> "cdimemployee",
    "partitionColumn" -> "intempdimkey",
    "lowerBound" -> "0",
    "upperBound" -> "500",
    "numPartitions" -> "50"
  ))
}

val get_all_emp = users.select("*")
val empDF = get_all_emp.toDF
get_all_emp.foreach(println)
经过一些处理后,我想把这个DF写回postgres。 下面的代码正确吗

empDF.write.jdbc("jdbc:postgresql://localhost/postgres", "test", Map("user" -> "user", "password" -> "pwd"))

任何指针(scala)都会有帮助。

您应该遵循下面的代码

val database = jobConfig.getString("database")
val url: String = s"jdbc:postgresql://localhost/$database"
val tableName: String = jobConfig.getString("tableName")
val user: String = jobConfig.getString("user")
val password: String = jobConfig.getString("password")
val sql = jobConfig.getString("sql")
val df = sc.sql(sql)
val properties = new Properties()
properties.setProperty("user", user)
properties.setProperty("password", password)
properties.put("driver", "org.postgresql.Driver")
df.write.mode(SaveMode.Overwrite).jdbc(url, tableName, properties)

您应该遵循下面的代码

val database = jobConfig.getString("database")
val url: String = s"jdbc:postgresql://localhost/$database"
val tableName: String = jobConfig.getString("tableName")
val user: String = jobConfig.getString("user")
val password: String = jobConfig.getString("password")
val sql = jobConfig.getString("sql")
val df = sc.sql(sql)
val properties = new Properties()
properties.setProperty("user", user)
properties.setProperty("password", password)
properties.put("driver", "org.postgresql.Driver")
df.write.mode(SaveMode.Overwrite).jdbc(url, tableName, properties)


你是否至少测试过你的代码来询问它是否正确?Hi@eliasah我得到的错误如下错误:value write不是org.apache.spark.sql.DataFrameIs spark 1.3的成员约束?你不能更新到1.6.2吗?@eliasah这是目前的一个约束你至少测试过你的代码,问它是否正确吗?嗨@eliasah我得到的错误如下错误:value write不是org.apache.spark.sql.dataframeisSpark 1.3的成员约束吗?你不能更新到1.6.2吗?@eliasah这是目前的一个限制也许这不是最好的解释,但至少对于投票被否决的人来说,一些关于为什么投票被否决的评论也是好的。@VishnuJayanand我没有说你否决了它。我只是想让做过的人给出一个原因。@eliasah很抱歉没有解释,但这段代码是我以前做过的,我记不清了,但我确信使用Map而不是Properties对Scala不起作用。这就是为什么我给出了我已经做过的代码并成功了。当我执行第一行代码错误:not found:value jobConfig时,我得到了这个错误@giaosudau@VishnuJayanandjobConfig只是Config的一个实例,您可以用db、password、,用户…也许这不是解释得最好的答案,但至少对于那些投了反对票的人来说,一些关于为什么投了反对票的评论也是很好的。@Vishnujayand我没有说你投了反对票。我只是想让做过的人给出一个原因。@eliasah很抱歉没有解释,但这段代码是我以前做过的,我记不清了,但我确信使用Map而不是Properties对Scala不起作用。这就是为什么我给出了我已经做过的代码并成功了。当我执行第一行代码错误:not found:value jobConfig时,我得到了这个错误@giaosudau@VishnuJayanandjobConfig只是Config的一个实例,您可以将其替换为用于db、password、user。。。