我正在尝试弄清楚如何使用新的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 数据库。
Update
当前的 Spark 版本(2.0 或更高版本)支持写入时创建表。
原来的答案
可以写入现有表,但目前 (Spark 1.5.0) 尚不支持使用 JDBC 数据源创建表*。你可以检查SPARK-7646 https://issues.apache.org/jira/browse/SPARK-7646以供参考。
如果表已经存在你可以简单地使用DataFrameWriter.jdbc
method:
val prop: java.util.Properties = ???
df.write.jdbc("jdbc:mysql://localhost/foo", "foo.bar2", prop)
* 有趣的是 PySpark 似乎支持使用以下方式创建表jdbc
method.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)