如何使用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正确执行此操作?
加载数据有效。例如。 print schema
显示myDateFiled: timestamp (nullable = true)
但myDf.show导致
java.lang.IllegalArgumentException
at java.sql.Date.valueOf(Date.java:143)
这让我相信我对日期的解析是不正确的。怎么会这样?
答案 0 :(得分:6)
时间戳的正确表示为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]
可以使用dateFormat
SimpleDateFormat
string来提供替代日期格式。
架构定义可以在.as[MyClass]
之前用类型转换替换:
spark.read
.options(Map("header" -> "true"))
.csv(...)
.withColumn("myField", $"myField".cast("timestamp"))
.as[MyClass]
DateType
使用java.sql.Date
。