Apache spark SPARK JDBC连接重用用于执行的许多查询

Apache spark SPARK JDBC连接重用用于执行的许多查询,apache-spark,Apache Spark,借用SO 26634853,然后回答以下问题: 使用像这样的黑斑羚连接是一次性设置: val JDBCDriver = "com.cloudera.impala.jdbc41.Driver" val ConnectionURL = "jdbc:impala://url.server.net:21050/default;auth=noSasl" Class.forName(JDBCDriver).newInstance val con = DriverManager.getConnection(

借用SO 26634853,然后回答以下问题:

使用像这样的黑斑羚连接是一次性设置:

val JDBCDriver = "com.cloudera.impala.jdbc41.Driver"
val ConnectionURL = "jdbc:impala://url.server.net:21050/default;auth=noSasl"

Class.forName(JDBCDriver).newInstance
val con = DriverManager.getConnection(ConnectionURL)
val stmt = con.createStatement()
val rs = stmt.executeQuery(query)

val resultSetList = Iterator.continually((rs.next(), rs)).takeWhile(_._1).map(r => {
getRowFromResultSet(r._2) // (ResultSet) => (spark.sql.Row)
}).toList

sc.parallelize(resultSetList)
如果我需要在con.createStatement及其关联代码周围放置一个循环,并使用一些逻辑执行它,比如说,执行5000次,该怎么办

关于map与mapPartitions之间的db连接开销讨论,在这种情况下,我会承担5000倍的连接成本,还是像这里那样可以重复使用?从SCALA JDBC上的文档来看,它似乎可以重用。 我的想法是,因为它不是像df_mysql=sqlContext.read.formatjdbc.options…这样的高级SPARK API,所以我认为它应该保持打开状态,但我想检查一下。可能是SPARK env自动关闭,但我认为不是。在处理结束时,是否可以发出关闭通知

使用配置单元上下文意味着我们不需要每次都打开连接——或者不是这样吗?然后使用拼花地板或兽人桌子,我想这样的方法是可行的,因为表演相当快。
我尝试了这个模拟,但连接仍然是开放的,所以在foreach中没有提供,这在性能方面不是一个问题

var counter = 0
do
  {
    counter = counter + 1
    val dataframe_mysql = spark.read.jdbc(jdbcUrl, "(select author from family) f ", connectionProperties)  
    dataframe_mysql.show

  } while (counter < 3)