在Scala中,我需要使用相同的连接来运行多个查询,并使用spark上下文将输出写入HDFS。它必须是相同的连接,因为一些查询创建了易失性表,如果连接关闭,易失性表将消失。
我知道以下功能:
val jdbcDF = sqlContext.read.format("jdbc").options(
Map("url" -> "jdbc:postgresql:dbserver",
"dbtable" -> "schema.tablename")).load()
但是每次运行查询时都需要创建连接。还有其他选择吗?我可以从连接对象获取结果集,但是如何让rs到sqlcontext将数据写入HDFS?
答案 0 :(得分:1)
AFAIK您无法在多个工作人员之间共享相同的连接。每个分区可以在不同的机器上处理,因此它们不能以旧方法共享一个连接,即jdbcrdd或使用数据帧的新方法。
请看看
how-can-i-connect-to-a-postgresql-database-into-apache-spark-using-scala
spark-jdbc-reuse-connection i.e per partition not single connection for all partitions
然而,我发现了一些有趣的东西(不是内置的api选项,我还没有测试过)ShardedJdbcRDD.scala你可以这样试试。