0

我使用Spark 1.3.0 假設我在Spark中有一個數據框,我需要將它存儲到Postgres DB(postgresql-9.2.18-1-linux-x64)上64bit ubuntu機器。 我也用postgresql9.2jdbc41.jar作爲驅動程序連接到Postgres的如何寫火花數據框到Postgres數據庫

我能夠使用DB下面來讀取數據的Postgres命令

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)都會有幫助。

+0

您是否至少測試了您的代碼以詢問是否正確? – eliasah

+0

您好@eliasah 我得到的錯誤是低於 錯誤:值寫入不是org.apache.spark.sql.DataFrame的成員 –

+0

是否是spark 1.3的約束?你不能更新到1.6.2嗎? – eliasah

回答

0

您應該按照下面的代碼。

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) 
+0

也許這不是最好解釋的答案,但至少對於已經倒票的人來說,一些關於爲什麼被拒絕投票的評論也很好。 – eliasah

+0

@eliasah我還沒有投票通過任何方式。 –

+0

@VishnuJayanand我沒有說你投了票。我只是問那個誰給了一個理由。 – eliasah