将数据框中的字符串值转换为时间戳并存储在 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))
我正在从文件中读取通话记录并将其转换为数据框中的列。在将该数据帧保存到配置单元 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))