2016-11-07 61 views
2

在Scala中,我需要使用相同的连接来运行多个查询并使用spark上下文将输出写入HDFS。它必须是相同的连接,因为一些查询会创建易失性表,如果连接关闭,易失性表将会消失。使用sparkcontext将结果集写入hdfs(一个连接 - 多个查询)

我知道下面的功能:

val jdbcDF = sqlContext.read.format("jdbc").options(
    Map("url" -> "jdbc:postgresql:dbserver", 
    "dbtable" -> "schema.tablename")).load() 

不过这需要每一个我运行一个查询时创建一个连接。还有其他的选择吗?我可以从连接对象中获取结果集,但是如何让rs到sqlcontext将数据写入HDFS?

+0

请chec我的答案。希望有所帮助! –

+0

你不能将一个查询/连接中的所有易失性表信息插入登台表中,并再次执行另一个查询来单独选择/创建易失性表? –

+0

我的回答很有用? –

回答

1

AFAIK你不能在多个工作人员之间共享相同的连接。每个分区可能在不同的机器上处理,因此它们不能以旧方法(即jdbcrdd)或使用数据框的新方法共享一个连接。

请看看

如何过,我发现了一些有趣的东西(没有内置API选项, 一世没有测试过)ShardedJdbcRDD.scala你可以试试这个。

相关问题