我正在从文件中读取呼叫记录并将它们转换为数据帧中的列。如何将具有字符串值的列转换为格式为“yyyymmddhhMMss”的时间戳到将数据帧保存到hive表之前的时间戳? 我使用下面的代码片段,但我在hive表中得到null值。据我所知,我必须指定格式,即“yyyymmddhhMMss”,其中存在字符串值。但不知道该怎么做。我正在使用spark 2.1.1
val df2 = df.withColumn("originTimeStamp",$"originTimeStamp".cast("timestamp")
答案 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))