Я создал одноэлементное соединение spark jdb c в драйвере и планирую использовать соединение в исполнителях. Я получаю ниже исключения. org. apache .spark.SparkException: задача не сериализуема
Внутри основного класса искры:
object ExecutorConnection {
private var connection: Connection = null
val url = prop.getProperty("url")
val user = prop.getProperty("user")
val pwd = prop.getProperty("password")
val driver = prop.getProperty("driver")
Class.forName(driver)
def getConnection(url: String, username: String, password: String): Connection = synchronized {
if (connection == null) {
connection = DriverManager.getConnection(url, username, password)
Class.forName(driver)
connection.setAutoCommit(false)
}
connection
}
lazy val createConnection = getConnection(url, user, pwd)
}
У меня есть несколько фреймов данных (df1, df2, df3) с другой схемой, где im Планирование создания соединения на уровне драйвера, сериализации соединения и использования его для всех информационных фреймов.
df1.rdd.repartition(2).mapPartitions((d) => Iterator(d)).foreach { partition =>
val conn = ExecutorConnection.createConnection
var ps: PreparedStatement = null
partition.grouped(1).foreach(batch => {
batch.foreach { x =>
{
ps = conn.prepareStatement(SqlString)
ps.addBatch()
conn.commit()
}
}
})
}