2015-09-16 8 views
6

新しいDataFrameWriterを使用してJDBCデータベースにデータを書き戻す方法を理解しようとしています。ソースコードを見ると可能であるように思えますが、私はこれについてのドキュメントを見つけることはできません。変換されたDataFrameをJDBC/MySQLに保存/エクスポートする

私はこのようなルックスをしようとしているかの簡単な例:

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") 

これは動作しません - 私は、このエラーで終わる:

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) 

は、私がもしわかりません私は間違ったことをしています(なぜ、それはJDBCRDDの代わりにDefaultSourceに解決されますか?)、あるいは既存のMySQLデータベースへの書き込みがSparkのDataFrames APIを使ってできない場合です。

+1

これは問題の原因ではありませんが、あなたの例では 'load'呼び出しがありません。 – zero323

答えて

6

更新

現在のスパークバージョン(2.0以降)は、書き込みに、テーブルの作成をサポートしています。

元答え

既存のテーブルに書き込むことが可能であるが、現時点では(スパーク1.5.0)JDBCデータソースを使用してテーブルを作成するには、サポートはまだ*されていないように見えます。参照のためSPARK-7646を確認することができます。

テーブルが既にあなたは、単にDataFrameWriter.jdbcメソッドを使用することができますが存在する場合:面白いPySparkは何*

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

jdbc方法を使用してテーブルの作成をサポートしているようです。

+2

ありがとう、それは完全に保存モードの追加で動作しました。すなわち、 'df.write.mode(SaveMode.Overwrite).jdbc(" jdbc:mysql:// localhost/foo "、" foo.bar2 "、prop)' –

関連する問題