在进行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()

本文介绍在使用Spark读取MySQL数据库时,遇到日期字段异常值导致的java.sql.SQLException错误。通过在JDBC URL中添加zeroDateTimeBehavior参数设置,将无法表示的日期转换为NULL,成功解决了问题。
627

被折叠的 条评论
为什么被折叠?



