【问题标题】:Sparkcsv fails to parse date fieldsSparkcsv 无法解析日期字段
【发布时间】:2026-02-22 00:25:02
【问题描述】:

我有一个 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") 也没有帮助 - 同样的错误。

【问题讨论】:

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


    【解决方案1】:

    我能够使用 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());
    }
    

    【讨论】: