2016-04-19 29 views
1

ich eine CSV-Datei Ich versuche, in Funken zu laden sparkcsv verwenden. Es gibt ein Feld, das Datum Typwert im Format hat „yyyy-mm-dd hh: mm: ss“ (beispielsweise „2014.09.18 00:00:00“) und ich wünsche bezeichnen sie als Datetype. Allerdings halte ichSparkcsv nicht Datumsfelder analysieren

immer

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

Von dem, was ich gelesen habe, dies geschieht, wenn es eine Zeichenfolge trifft, die nicht dem Standardmuster folgt. Aber meiner tut! Und ich habe sogar versucht, option("dateFormat", "yyyy-mm-dd hh:mm:ss") beim Lesen der CSV, aber das hat nichts getan.

Ich habe an anderer Stelle gelesen, dass es möglich ist, für die diese Fehler auftreten, wenn das Feld leer ist, aber dies scheint nicht der Fall zu sein.

Auch option("mode", "DROPMALFORMED") hilft nicht - gleichen Fehler.

Antwort

0

Ich konnte dies mit Funken csv_2.10 Version 1.3.1 reproduzieren. Ich habe dann auf Version 1.4.0 aktualisiert und das Problem tritt nicht auf.

@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()); 
} 
Verwandte Themen