我正在试图弄清楚如何使用新的DataFrameWriter
将数据写回JDBC数据库。我似乎无法找到任何相关的文档,虽然查看源代码似乎应该是可能的。
我正在尝试的一个简单例子如下:
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)
我不确定我是否做错了(为什么它会解析为DefaultSource而不是JDBCRDD?)或者如果使用Spark的DataFrames API无法写入现有的MySQL数据库。
答案 0 :(得分:8)
<强>更新强>
当前Spark版本(2.0或更高版本)支持在写入时创建表。
原始答案
可以写入现有的表,但此时看起来(Spark 1.5.0)还不支持使用JDBC数据源创建表*。您可以查看SPARK-7646以供参考。
如果表已存在,您只需使用val prop: java.util.Properties = ???
df.write.jdbc("jdbc:mysql://localhost/foo", "foo.bar2", prop)
方法:
jdbc
*有趣的是,PySpark似乎支持使用{{1}}方法创建表格。