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

rkkpypqq  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(282)

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

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

gfttwv5a1#

您可以使用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))
yws3nbqq

yws3nbqq2#

要将字符串值从dataframe转换为timestamp,可以使用 to_timestamp 中提供的功能 org.apache.spark.sql.functions 包裹。这样地:
Spark2.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|
+-------------------+

希望有帮助!

相关问题