使用sparkcontext(一个连接-多个查询)将结果集写入hdfs



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

我知道以下功能:

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

但是每次运行查询时都需要创建一个连接。还有其他选择吗?我可以从一个连接对象得到一个结果集,但是如何给sqlcontext写数据到HDFS的rs ?

恐怕你不能在多个worker之间共享相同的连接。每个分区可以在不同的机器上处理,因此它们不能共享一个连接,无论是使用旧的方法(如jdbcrdd)还是使用数据框架的新方法。

请查看

  • how-can-i-connect-to-a-postgresql-database-into-apache-spark-using-scala

  • design-patterns-for-using-foreachrdd

  • spark-jdbc-reuse-connection即每个分区而不是所有分区的单个连接

无论如何,我发现了一些有趣的东西(不是内置api选项,我还没有测试)ShardedJdbcRDD。Scala可以这样尝试

最新更新