将数据框中的字符串值转换为时间戳并存储在 Hive 中

Convert a String value in dataframe to timestamp and Store in Hive

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

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

要将字符串值从数据帧转换为时间戳,您可以使用 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_timestamp

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