我正在从文件中读取通话记录并将其转换为数据框中的列。在将该数据帧保存到配置单元表之前,如何将具有字符串值的列(实际上是格式为“yyyymmddhhMMss”的时间戳)转换为时间戳? 我使用了下面的代码片段,但我在配置单元表中得到了空值。据我了解,我必须指定其中存在字符串值的格式,即“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|
+-------------------+
希望对您有帮助!
关于scala - 将数据帧中的字符串值转换为时间戳并存储在 Hive 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50230613/