SPARK JDBC Повторное использование соединения для многих выполненных запросов - PullRequest
0 голосов
/ 09 мая 2018

Заимствование у SO 26634853, затем следующие вопросы:

Использование соединения IMPALA , подобного этому, выполняется за один раз:

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)

Что если мне нужно поместить loop вокруг con.createStatement() и связанного с ним кода с некоторой логикой и выполнить его, скажем, несколько раз, 5000?

  1. Ссылаясь на обсуждения издержек соединения db с map против mapPartitions, могу ли я в этом случае нести 5000 x стоимость соединения, или это можно использовать повторно, как это делается здесь? Из документации по SCALA JDBC похоже, что ее можно использовать повторно.

Я думаю, что поскольку это не высокоуровневый SPARK API , как df_mysql = sqlContext.read.format("jdbc").options ..., то я думаю, что он должен оставаться открытым, но хотел бы проверить. Может быть, SPARK env закрывает его автоматически, но я думаю, что нет. В конце обработки может быть выдано закрытие?

  1. Использование контекста HIVE означает, что нам не нужно каждый раз открывать соединение - или это не так? Затем, используя паркет или стол ORC, я полагаю, что такой подход позволил бы добиться высокой производительности.

1 Ответ

0 голосов
/ 09 мая 2018

Я попробовал эту симуляцию, и соединение остается открытым, поэтому, если оно не указано в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...