From 9f5b11ba8c30a6908186ba392c090e4e9439d21d Mon Sep 17 00:00:00 2001 From: gatorsmile Date: Mon, 23 Jan 2017 01:01:06 -0800 Subject: [PATCH] try1 --- .../execution/datasources/jdbc/JDBCOptions.scala | 14 ++------------ .../sql/execution/datasources/jdbc/JdbcUtils.scala | 9 ++++++++- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JDBCOptions.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JDBCOptions.scala index 6fd2e0d24112b..248f929dc0ce8 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JDBCOptions.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JDBCOptions.scala @@ -17,7 +17,7 @@ package org.apache.spark.sql.execution.datasources.jdbc -import java.sql.{Connection, DriverManager} +import java.sql.Connection import java.util.Properties import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap @@ -73,17 +73,7 @@ class JDBCOptions( // ------------------------------------------------------------ // Optional parameters // ------------------------------------------------------------ - val driverClass = { - val userSpecifiedDriverClass = parameters.get(JDBC_DRIVER_CLASS) - userSpecifiedDriverClass.foreach(DriverRegistry.register) - - // Performing this part of the logic on the driver guards against the corner-case where the - // driver returned for a URL is different on the driver and executors due to classpath - // differences. - userSpecifiedDriverClass.getOrElse { - DriverManager.getDriver(url).getClass.getCanonicalName - } - } + val driverClass = parameters.get(JDBC_DRIVER_CLASS) // the number of partitions val numPartitions = parameters.get(JDBC_NUM_PARTITIONS).map(_.toInt) diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JdbcUtils.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JdbcUtils.scala index b13849475811f..e23a3530003de 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JdbcUtils.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JdbcUtils.scala @@ -46,7 +46,14 @@ object JdbcUtils extends Logging { * @param options - JDBC options that contains url, table and other information. */ def createConnectionFactory(options: JDBCOptions): () => Connection = { - val driverClass: String = options.driverClass + val userSpecifiedDriverClass = options.driverClass + userSpecifiedDriverClass.foreach(DriverRegistry.register) + // Performing this part of the logic on the driver guards against the corner-case where the + // driver returned for a URL is different on the driver and executors due to classpath + // differences. + val driverClass: String = userSpecifiedDriverClass.getOrElse { + DriverManager.getDriver(options.url).getClass.getCanonicalName + } () => { DriverRegistry.register(driverClass) val driver: Driver = DriverManager.getDrivers.asScala.collectFirst {