Spark DataSet 日期时间解析
Posted
技术标签:
【中文标题】Spark DataSet 日期时间解析【英文标题】:Spark DataSet date time parsing 【发布时间】:2016-10-06 12:14:38 【问题描述】:我应该如何使用 spark 2.0 数据集 API 正确执行日期时间解析?
有很多数据框/RDD的样本
Spark date parsing Better way to convert a string field into timestamp in Spark How to change the column type from String to Date in DataFrames?类似的类
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)
这让我相信我对日期的解析不正确。这怎么可能?
【问题讨论】:
对不起,我不太清楚你在这里想要达到什么目标以及你的问题是什么。您能否向我们展示输入文件的示例并详细说明您的问题? 可能应该改写:如何为数据集执行显式转换。 @cheseaux 另请参阅最新编辑中的说明 【参考方案1】:时间戳的正确表示是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
。
【讨论】:
以上是关于Spark DataSet 日期时间解析的主要内容,如果未能解决你的问题,请参考以下文章