当 Spark 在使用 JDBC 连接数据库时,常见的问题是出现 Socket 异常 : 连接重置。这个问题主要是由于 Spark 的并行处理和 JDBC 连接池中的连接过期引起的。为了解决这个问题,可以将 JDBC 连接池的最大闲置时间设置为 0,这样连接永远不会过期。
以下是示例代码:
val spark: SparkSession = SparkSession.builder() .appName("test") .config("spark.driver.extraClassPath", "/path/to/jdbc.jar") .getOrCreate()
val jdbcUrl = "jdbc:mysql://localhost:3306/test?user=root&password=passwd"
val connectionProperties = new Properties() connectionProperties.setProperty("driver", "com.mysql.jdbc.Driver") connectionProperties.setProperty("user", "root") connectionProperties.setProperty("password", "passwd") connectionProperties.setProperty("autoReconnect", "true") connectionProperties.setProperty("maxIdleTime", "0")
val jdbcDF = spark.read.jdbc(jdbcUrl, "test_table", connectionProperties)
jdbcDF.show()