从日期和小时列创建时间戳 - Pyspark3

Create timestamp from Date and Hour columns - Pyspark3

我有一个 pyspark 数据框,其中包含我想从中创建时间戳的两列。

+----------+------------+
|start_date|daypart_hour|
+----------+------------+
|2019-09-17|          22|
|2019-09-17|          11|
|2019-09-17|           9|
+----------+------------+

daypart_hour 是从午夜到午夜的刻度,范围为 0-23。 0 个与午夜相关,23 个与晚上 11 点相关。

我很好奇如何制作这个……或类似的东西。

+----------+------------+---------------------+
|start_date|daypart_hour|          start_dt_ts|
+----------+------------+---------------------+
|2019-09-17|          22|2019-09-17 10:00:00pm|
|2019-09-17|          11|2019-09-17 11:00:00am|
|2019-09-17|           9|2019-09-17 09:00:00am|
+----------+------------+---------------------+

每个日期总是有 0-23 小时。没有缺失值。

您可以使用date_formatto_timestampconcat 得到想要的结果。有关日期时间字符的更多信息,请参阅 Java Simple Date format

from pyspark.sql import functions as F

df.withColumn("start_dt_ts", \
              F.date_format(F.to_timestamp(F.concat("start_date","daypart_hour"),"yyyy-MM-ddHH"),\
                                          "yyyy-MM-dd hh:ss:SSa")).show(truncate=False)

#+----------+------------+---------------------+
#|start_date|daypart_hour|start_dt_ts          |
#+----------+------------+---------------------+
#|2019-09-17|22          |2019-09-17 10:00:00PM|
#|2019-09-17|11          |2019-09-17 11:00:00AM|
#|2019-09-17|9           |2019-09-17 09:00:00AM|
#+----------+------------+---------------------+