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

标签 scala apache-spark hive apache-spark-sql

我正在从文件中读取通话记录并将其转换为数据框中的列。在将该数据帧保存到配置单元表之前,如何将具有字符串值的列(实际上是格式为“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/

相关文章:

sql - 执行Spark Job时GettingTask不可序列化异常

scala - TreeMap 中缺少键值对

scala - scala中模式匹配的时间复杂度是多少?

java - Spark : rewrite . 过滤器 ("count > 1") 没有字符串表达式

java - 使用 Spark 查询存储在 HDFS 中的数据的最佳方法是什么?

hadoop - Hive 分区表的记录数

scala - Gatling-scala 检查 2 个状态代码(或)

scala - 使用结构化 Spark Streaming 在 HBase 中批量插入数据

python - 检查广播变量 PySpark 的大小

hadoop - Hive:使用具有多个目录的多文件创建表