我有一个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")
没有帮助 - 同样的错误。
答案 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());
}