2016-04-19 2 views
1

У меня есть файл csv, который я пытаюсь загрузить в искру с помощью sparkcsv. Существует поле, которое имеет значения типа даты в формате «yyyy-mm-dd hh: mm: ss» (например, «2014-09-18 00:00:00»), и я хочу обозначить его как DateType. Тем не менее, я получаюSparkcsv не удается проанализировать поля даты

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

Из того, что я прочитал это происходит, когда он встречает строку, которая не следовать шаблону по умолчанию. Но моя делает! И я даже пытался добавить option("dateFormat", "yyyy-mm-dd hh:mm:ss") при чтении csv, но ничего не сделал.

Я читал в другом месте, что эта ошибка может возникнуть, если поле пусто, однако, похоже, это не так.

Также option("mode", "DROPMALFORMED") не помогает - такая же ошибка.

ответ

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()); 
} 
Смежные вопросы