这里只说的是SPARK SQL当中出现的问题
第一种场景
如果是在本地服务上运行时出现的这个异常那么原因有很多种:
1、驱动类写错、jdbcUrl格式错误等等。
其实本地运行异常大部分是链接数据库的url的问题
一个正确的实例
这个是链接数据库的方法(Oracle的mysql应该也是适用的)
def getJdbcData(spark: SparkSession,user:String,password:String,
url:String,tablename:String): DataFrame = {
LOGGER.info("+++++++++++++++++++ url =====================: "+url)
val connectionProperties = new Properties()
connectionProperties.put("user", user)
connectionProperties.put("password", password)
connectionProperties.put("driver", "oracle.jdbc.driver.OracleDriver")
val jdbcDF = spark.read
.jdbc(url, tablename, connectionProperties)
jdbcDF
}
def getJdbcDataA(spark: SparkSession,user:String,password:String,
url:String,tablename:String): DataFrame = {
LOGGER.info("+++++++++++++++++++ url =====================: "+url)
val connectionProperties = new Properties()
connectionProperties.put("user", user)
connectionProperties.put("password", password)
val jdbcDF = spark.read
.format("jdbc")
.option("url", url)
.option("dbtable", tablename)
.option("user", user)
.option("password",password)
.option("driver", "oracle.jdbc.driver.OracleDriver")
.load()
jdbcDF
}
/**
* 获取模型超市数据库的查询
*
* @param spark SparkSession
* @param tablename 表名称
* @return DataFrame
*/
def getCurrentJdbcData(spark: SparkSession,tablename:String): DataFrame = {
getJdbcData(spark,user,passWord,url,tablename)
}
URL的实例:jdbc:oracle:thin:@192.168.x.x:1521/orcl
第二种场景
在本地运行没问题,放到线上却出现这个问题
第一个解决方式
有可能是你将jdbc的jar包打到jar包中路径出了问题,使得Spark没有找到那个jar造成了那个错误那么可以这么处理
在线上的spark目录(/home/spark-2.1.1-bin-hadoop2.6/jars)中加入odbc的jar包
这种方式是把jar包变成了全量的,这种方式是不可取的
第二个解决方式(重点,我就是踩在这上面)

缺少driver属性.png
检查配置当中是否是缺少了driver这个属性如上图,添加driver属性如下图

driver已添加.png
问题就可以解决了,但是必须要包中你的jdbc相关的jar包是全的情况下