如何将日期和时间列合并为一个,然后将其转换为EST格式?

问题描述

如果我有一个如下图所示的df

SELECT `case_id` AS ID,`updt_dt` AS Update_date,`updt_tm` AS Update_time 
FROM case_dly_snap 
LIMIT 2"

我的df如下:

enter image description here

其中update_date为日期格式,update_time为字符串格式。

如何将其转换为日期+时间格式?

预期产量

enter image description here

解决方法

您可以尝试这种方法。

使用Hive Built-in Functions格式update_time和concat update_date将其转换为timestamp

例如

val lstData = List((1,"2018-05-14","012230.627"),(2,"2018-05-15","070026.886"),(3,"2018-05-16","023525.669"))
val cols = Array("ID","update_date","update_time")
val dfTime = sc.parallelize(lstData).toDF(cols: _*)

dfTime.show()

dfTime.createOrReplaceTempView("df_time")

spark.sql(
"""SELECT ID,update_date,update_time,|to_utc_timestamp(concat_ws(' ',CAST(update_date AS STRING),concat_ws(':',substr(split(update_time,'\\.')[0],2),3,5,2))),'GMT') AS tms
  |FROM df_time """.stripMargin)
.show()
+---+-----------+-----------+-------------------+
| ID|update_date|update_time|                tms|
+---+-----------+-----------+-------------------+
|  1| 2018-05-14| 012230.627|2018-05-14 01:22:30|
|  2| 2018-05-15| 070026.886|2018-05-15 07:00:26|
|  3| 2018-05-16| 023525.669|2018-05-16 02:35:25|
+---+-----------+-----------+-------------------+