Spark DataSet 日期时间解析

Spark DataSet date time parsing

我应该如何使用 spark 2.0 数据集正确执行日期时间解析 API?

有很多数据框/RDD 样本,例如

一个class喜欢

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?

正确执行此操作

编辑

加载数据有效。例如。 print schema 显示 myDateFiled: timestamp (nullable = true) 但是 myDf.show 结果是

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

这让我相信我对日期的解析不正确。怎么会这样?

时间戳的正确表示是 java.sql.Timestamp 所以 class 应该定义为

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]

可以使用 dateFormatSimpleDateFormat string 提供替代日期格式。

模式定义可以替换为 .as[MyClass] 之前的类型转换:

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

对于 DateType 使用 java.sql.Date