2017-09-19 9 views
2

Ich Parsen eine CSV-Datei Daten alsWie Datum im benutzerdefinierten Format von CSV-Datei gelesen werden?

03-10-2016,18:00:00,2,6 

mit Wenn ich Datei lese Schema wie unter Erstellen von

StructType schema = DataTypes.createStructType(Arrays.asList(
       DataTypes.createStructField("Date", DataTypes.DateType, false), 
       DataTypes.createStructField("Time", DataTypes.TimestampType, false), 
       DataTypes.createStructField("CO(GT)", DataTypes.IntegerType, false), 
       DataTypes.createStructField("PT08.S1(CO)", DataTypes.IntegerType, false))) 
Dataset<Row> df = spark.read().format("csv").option("Date", "dd-MM-yyyy").schema(schema).load("src/main/resources/AirQualityUCI/sample.csv"); 

Sein unter Fehler erzeugt als

Exception in task 0.0 in stage 0.0 (TID 0) 
java.lang.IllegalArgumentException 
    at java.sql.Date.valueOf(Unknown Source) 
    at org.apache.spark.sql.catalyst.util.DateTimeUtils$.stringToTime(DateTimeUtils.scala:137) 

glaube ich, dass es ist aufgrund des Datums Formatfehler. Wie können sie in bestimmte Formate umgewandelt werden?

+2

_ "Ich lese eine CSV-Datei" _ Wie liest du die Datei? –

+0

'DataTypes.TimestampType' sollte auch ein Datumsfeld haben, denke ich. –

+0

@JacekLaskowski Parsing :) –

Antwort

3

Verwenden dateFormat Option, wenn die CSV-Datei zu lesen (n) wie folgt:

val csvs = spark. 
    read. 
    format("csv"). 
    option("dateFormat", "dd-MM-yyyy"). // <-- should match 03-10-2016 
    load(...) 

Die Standardeinstellung für dateFormat ist yyyy-MM-dd so ist es keine Überraschung Sie die Parsing-Fehler haben.


vom javadoc von valueOf Zitiert:

WirftIllegalArgumentException - wenn das angegebene Datum ist nicht in dem JDBC-Datum Escape-Format (JJJJ [m] m- [d] d)

Das bedeutet, dass der Wert für den Parser von valueOf falsch ist.

würde ich zwei Empfehlungen haben sich hier:

  1. den Datensatz lesen und show es zu sehen, was Sie im Inneren haben.

  2. Verwenden dateFormat Option das richtige Format (es ist yyyy-MM-dd standardmäßig)

Weitere Informationen über die Formatmuster in Date and Time Patterns (von java.text.SimpleDateFormat) zu definieren.

+0

Kann ich hier map-Funktion verwenden, die beim Analysieren der CSV-Daten 'dataFormat' on Zeichenfolge verwenden und es in das erforderliche Format konvertieren und dann Daten daraus erstellen. Nur neugierig. –

+1

Sie können, aber tun Sie nicht Dinge, die Spark für Sie tun könnte (es sei denn, Sie sind sicher, dass Sie sie besser machen können). –

+1

Sure.Ich bin ein großer Fan von dir und habe deine wunderbaren Notizen mit dem Namen "Mastering Spark" gelesen. Sie sind sehr hilfreich beim Lernen :) –

Verwandte Themen