将数据帧中的String值转换为时间戳并将其存储在Hive中

时间:2018-05-08 09:44:04

标签: scala apache-spark hive apache-spark-sql spark-dataframe

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

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

2 个答案:

答案 0 :(得分:2)

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

适用于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|
+-------------------+

我希望它有所帮助!

答案 1 :(得分:2)

您可以使用如下所示的unix_timestamp

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