Sparkcsv无法解析日期字段

时间:2016-04-19 23:19:38

标签: date parsing jdbc apache-spark spark-csv

我有一个csv文件,我试图使用sparkcsv加载到spark中。有一个字段的日期类型值的格式为" yyyy-mm-dd hh:mm:ss" (例如" 2014-09-18 00:00:00")我希望将其指定为DateType。但是我一直在

java.lang.IllegalArgumentException at java.sql.Date.valueOf(Date.java:140)

根据我所读到的,当遇到不遵循默认模式的字符串时会发生这种情况。但我的确如此!我甚至尝试在阅读csv时添加option("dateFormat", "yyyy-mm-dd hh:mm:ss"),但这并没有做任何事情。

我在其他地方读到,如果字段为空,则可能会发生此错误,但事实并非如此。

另外option("mode", "DROPMALFORMED")没有帮助 - 同样的错误。

1 个答案:

答案 0 :(得分:0)

我能够使用spark-csv_2.10版本1.3.1重现这一点。然后我更新到版本1.4.0并且没有出现问题。

@Test
public void fixedInNextRelease() throws Exception {

    List<StructField> structFields = new ArrayList<>();
    structFields.add(new StructField("date_field", DataTypes.DateType, true, Metadata.empty()));
    StructType schema = new StructType(structFields.toArray(new StructField[0]));

    HashMap<String, String> options = new HashMap<>();
    options.put("path", "src/test/resources/date-test.csv");
    options.put("header", "false");
    options.put("delimiter", "|");
    options.put("dateFormat", "yyyy-MM-dd H:m:s");

    DataFrame left = hiveContext.load("com.databricks.spark.csv", schema, options);
    assertEquals("2014-09-18", left.first().mkString());
}