2015-09-16 12 views
6

Sto cercando di capire come utilizzare il nuovo DataFrameWriter per scrivere i dati su un database JDBC. Non riesco a trovare alcuna documentazione per questo, anche se guardando il codice sorgente sembra che dovrebbe essere possibile.Salvataggio/esportazione di DataFrame trasformato in JDBC/MySQL

Un esempio banale di quello che sto cercando si presenta così:

sqlContext.read.format("jdbc").options(Map(
    "url" -> "jdbc:mysql://localhost/foo", "dbtable" -> "foo.bar") 
).select("some_column", "another_column") 
.write.format("jdbc").options(Map(
    "url" -> "jdbc:mysql://localhost/foo", "dbtable" -> "foo.bar2") 
).save("foo.bar2") 

questo non funziona - io alla fine con questo errore:

java.lang.RuntimeException: org.apache.spark.sql.execution.datasources.jdbc.DefaultSource does not allow create table as select. 
    at scala.sys.package$.error(package.scala:27) 
    at org.apache.spark.sql.execution.datasources.ResolvedDataSource$.apply(ResolvedDataSource.scala:200) 

non sono sicuro se Sto facendo qualcosa di sbagliato (perché si sta risolvendo su DefaultSource invece di JDBCRDD per esempio?) O se scrivere su un database MySQL esistente non è possibile usando l'API DataFrames di Spark.

+1

Non è la fonte del problema, ma nell'esempio manca la chiamata 'carica'. – zero323

risposta

6

Aggiornamento

versione Spark attuale (2.0 o versioni successive) supporta la creazione di tabella di scrittura.

La risposta originale

E 'possibile scrivere a una tabella esistente, ma sembra che in questo momento (Spark 1.5.0) la creazione di tabella utilizzando sorgente di dati JDBC non è ancora supportato *. È possibile controllare SPARK-7646 come riferimento.

Se tabella esiste già si può utilizzare semplicemente DataFrameWriter.jdbc metodo:

val prop: java.util.Properties = ??? 
df.write.jdbc("jdbc:mysql://localhost/foo", "foo.bar2", prop) 

* Ciò che è interessante PySpark sembra sostenere la creazione delle tabelle utilizzando jdbc metodo.

+2

Grazie, ha funzionato perfettamente con l'aggiunta di una modalità di salvataggio; ad esempio 'df.write.mode (SaveMode.Overwrite) .jdbc (" jdbc: mysql: // localhost/foo "," foo.bar2 ", prop)' –

Problemi correlati