1

我有一个 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)

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

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

option("mode", "DROPMALFORMED")无济于事-同样的错误。

4

1 回答 1

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());
}
于 2016-07-07T02:56:09.697 回答