2

spark 2.0 データセット API で日時の解析を適切に実行するにはどうすればよいですか?

データフレーム/RDDライクなサンプルがたくさんあります

みたいなクラス

case class MyClass(myField:java.sql.Datetime)

val mynewDf = spark.read
    .option("header", "true")
    .option("inferSchema", "true")
    .option("charset", "UTF-8")
    .option("delimiter", ",")
    .csv("pathToFile.csv")
    .as[MyClass]

型をキャストするには十分ではありません。データセット API を使用してこれを適切に実行するにはどうすればよいですか?

編集

データのロードは機能します。例えば。aprint schemaは示していますmyDateFiled: timestamp (nullable = true) が、myDf.show の結果は

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

これにより、日付の解析が間違っていると信じるようになりました。どうすればいいの?

4

1 に答える 1

9

タイムスタンプを正しく表現するにはjava.sql.Timestamp 、クラスを次のように定義する必要があります。

case class MyClass(myField: java.sql.Timestamp)

対応するデータ:

myField
"2016-01-01 00:00:03"

この条件が満たされている場合は、スキーマを提供するだけです。

spark.read
  .options(Map("header" -> "true"))
  .schema(StructType(Seq(StructField("myField", TimestampType, false))))
  .csv(...)
  .as[MyClass]

dateFormatwith SimpleDateFormatstringを使用して、別の日付形式を提供することができます。

スキーマ定義は、前に型キャストに置き換えることができます.as[MyClass]:

spark.read
  .options(Map("header" -> "true"))
  .csv(...)
  .withColumn("myField", $"myField".cast("timestamp"))
  .as[MyClass]

DateType使用するためjava.sql.Date

于 2016-10-06T12:38:01.107 に答える