Scala 将dataframe中的字符串值转换为时间戳并存储在配置单元中

Scala 将dataframe中的字符串值转换为时间戳并存储在配置单元中,scala,apache-spark,hive,apache-spark-sql,spark-dataframe,Scala,Apache Spark,Hive,Apache Spark Sql,Spark Dataframe,我从文件中读取呼叫记录,并将其转换为数据帧中的列。在将数据帧保存到配置单元表之前,如何将具有字符串值(实际上是格式为“yyyymmddhhMMss”的时间戳)的列转换为时间戳? 我使用了下面的代码段,但在配置单元表中得到空值。据我所知,我必须指定字符串值存在的格式,即“yyyymmddhhMMss”。但我不知道该怎么做。我正在使用spark 2.1.1 val df2 = df.withColumn("originTimeStamp",$"originTimeStamp".cast("times

我从文件中读取呼叫记录,并将其转换为数据帧中的列。在将数据帧保存到配置单元表之前,如何将具有字符串值(实际上是格式为“yyyymmddhhMMss”的时间戳)的列转换为时间戳? 我使用了下面的代码段,但在配置单元表中得到空值。据我所知,我必须指定字符串值存在的格式,即“yyyymmddhhMMss”。但我不知道该怎么做。我正在使用spark 2.1.1

val df2 = df.withColumn("originTimeStamp",$"originTimeStamp".cast("timestamp")

要将字符串值从dataframe转换为时间戳,可以使用
org.apache.spark.sql.functions
包中提供的
to_timestamp
函数。像这样:

适用于Spark 2.2及以上版本

val df2 = df.withColumn("originTimeStamp",to_timestamp($"originTimeStamp", "yyyymmddhhMMss"))
适用于Spark 2.1及以下版本

val df2 = df.withColumn("originTimeStamp",unix_timestamp($"originTimeStamp", "yyyymmddhhMMss").cast("timestamp"))
它将为您提供以下输出:

+-------------------+
|    originTimeStamp|
+-------------------+
|2017-01-07 10:06:00|
+-------------------+

我希望有帮助

您可以使用unix\u时间戳,如下所示

import org.apache.spark.sql.types._
val df2 = Seq((1, "20180508022659")).toDF("id", "originTimeStamp")
df2.withColumn("originTimeStamp", unix_timestamp($"originTimeStamp", "yyyyMMddHHmmss").cast(TimestampType))

问题是,在spark 2.1.1中,to_时间戳不可用。唯一可用的功能是设置utc时间戳。有什么出路吗?