2016-04-19 11 views
1

私はsparkcsvを使用してsparkにロードしようとしているcsvファイルを持っています。 「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)

を得続けます。しかし、私はしません!私はさらにCSVを読むときにoption("dateFormat", "yyyy-mm-dd hh:mm:ss")を追加しようとしましたが、何もしませんでした。

フィールドが空の場合にこのエラーが発生する可能性がありますが、これはそうではないようです。

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()); 
} 
関連する問題