Datetime GregorianCalendar-java.lang.IllegalArgumentException:月份

Datetime GregorianCalendar-java.lang.IllegalArgumentException:月份,datetime,apache-spark,jdbc,Datetime,Apache Spark,Jdbc,当我试图用spark dataframe加载mysql表时。 我收到了错误信息 Caused by: java.lang.IllegalArgumentException: MONTH at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2648) at java.util.Calendar.updateTime(Calendar.java:3393) at java.util.Calendar.getT

当我试图用spark dataframe加载mysql表时。 我收到了错误信息

Caused by: java.lang.IllegalArgumentException: MONTH
  at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2648)
  at java.util.Calendar.updateTime(Calendar.java:3393)
  at java.util.Calendar.getTimeInMillis(Calendar.java:1782)
  at com.mysql.cj.jdbc.io.JdbcDateValueFactory.createFromDate(JdbcDateValueFactory.java:67)
  at com.mysql.cj.jdbc.io.JdbcDateValueFactory.createFromDate(JdbcDateValueFactory.java:39)
  at com.mysql.cj.core.io.ZeroDateTimeToNullValueFactory.createFromDate(ZeroDateTimeToNullValueFactory.java:41)
  at com.mysql.cj.core.io.BaseDecoratingValueFactory.createFromDate(BaseDecoratingValueFactory.java:46)
  at com.mysql.cj.core.io.BaseDecoratingValueFactory.createFromDate(BaseDecoratingValueFactory.java:46)
  at com.mysql.cj.core.io.MysqlTextValueDecoder.decodeDate(MysqlTextValueDecoder.java:66)
  at com.mysql.cj.mysqla.result.AbstractResultsetRow.decodeAndCreateReturnValue(AbstractResultsetRow.java:70)
  at com.mysql.cj.mysqla.result.AbstractResultsetRow.getValueFromBytes(AbstractResultsetRow.java:225)
  at com.mysql.cj.mysqla.result.TextBufferRow.getValue(TextBufferRow.java:122)
  at com.mysql.cj.jdbc.result.ResultSetImpl.getNonStringValueFromRow(ResultSetImpl.java:630)
  at com.mysql.cj.jdbc.result.ResultSetImpl.getDateOrTimestampValueFromRow(ResultSetImpl.java:643)
  at com.mysql.cj.jdbc.result.ResultSetImpl.getDate(ResultSetImpl.java:788)
  at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$org$apache$spark$sql$execution$datasources$jdbc$JdbcUtils$$makeGetter$$.apply(JdbcUtils.scala:380)

请尝试最新的mysql 5.X.X JDBC驱动程序。

请添加用于加载表的代码、表的架构以及您认为可能与问题相关的其他详细信息。简言之,请提供一个。表中是否有任何错误的日期值?例如,日期0000-00-00?是的,我的值不正确,比如“2018-00-00”、“2018-01-00”、“2018-00-01”。正在使用spark“JDBCDialogs”来缓解问题。@ruseel如果您在resultset上使用getString,然后尝试将其转换为date(如果可能的话)可能会有所帮助。。。我也遇到了同样的错误,在我的例子中,可以使用rs.getString(“date\u column\u name”),然后在上面使用日期解析器。。。这不是最好的方式,在我上面的例子中,有一个类似“1900-00-00”的行。因此,对于某些表,我必须使用JDBC方言转换为字符串类型。对于其他表,我只是清理表,如update、delete。