1

sparkcsvを使用してsparkにロードしようとしているcsvファイルがあります。「yyyy-mm-dd hh:mm:ss」(例: 「2014-09-18 00:00:00」) の形式の日付型の値を持つフィールドがあり、それを DateType として指定したいと考えています。しかし、私は取得し続けます

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

私が読んだことから、これはデフォルトのパターンに従わない文字列に遭遇したときに起こります。しかし、私はそうします!そしてoption("dateFormat", "yyyy-mm-dd hh:mm:ss")、csvを読むときに追加しようとしましたが、何もしませんでした。

フィールドが空の場合にこのエラーが発生する可能性があることを他の場所で読みましたが、そうではないようです。

またoption("mode", "DROPMALFORMED")、役に立たない - 同じエラー。

4

1 に答える 1

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());
}
于 2016-07-07T02:56:09.697 に答える