在进行spark程序连接mysql数据库时,遇到以上问题。
java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date
在mysql数据库中有一个时间字段:timeinfo,异常值默认为“0000-00-00”
问题代码如下:
// hive和mysql关联使用
// 加载Hive表数据
val hiveDF = spark.table("fanyanyan.lianjia")
// 加载MySQL表数据
val mysqlDF = spark.read.format("jdbc")
.option("url", "jdbc:mysql://node1:3306")
.option("dbtable", "fanyanyan.lianjia")
.option("user", "root")
.option("password", "123456")
.option("driver", "com.mysql.jdbc.Driver")
.load()
// JOIN
val resultDF = hiveDF.join(mysqlDF, hiveDF.col("url") === mysqlDF.col("url"))
resultDF.show
解决方法:
在jdbc的url加上 zeroDateTimeBehavior 参数。
即:加入
.option("zeroDateTimeBehavior","convertToNull")
正确的代码段如下所示:
// 加载MySQL表数据
val mysqlDF = spark.read.format("jdbc")
.option("url", "jdbc:mysql://node1:3306")
.option("dbtable", "fanyanyan.lianjia")
.option("user", "root")
.option("password", "123456")
.option("driver", "com.mysql.jdbc.Driver")
.option("zeroDateTimeBehavior","convertToNull")
.load()