首页 > 解决方案 > 从一个 pyspark 数据帧中的两种不同时间戳格式获取日期

问题描述

我有一个带有时间戳字段的 pyspark 数据框。但它包含两种类型的时间戳格式(都是字符串)。

   +----------------------+
    | timestamp           |
    +---------------------+
    | 06-06-2019,17:15:46|
    +---------------------+
    |2020-01-01T06:07:22.000Z

如何在同一个 pyspark 数据帧中创建另一个“日期”列,该数据帧仅捕获基于时间戳字段的日期?理想的结果是这样的

+----------+---------------------+
|      date|timestamp            |
+----------+----------------------+
|2019-06-06| 06-06-2019,17:15:46 |
+----------+----------------------+
|2020-01-01|2020-01-01T06:07:22.000Z|

标签: pythonapache-sparkpysparktimestamp

解决方案


我认为我们需要为这种情况定义一个函数并在dataframe中使用该函数。

Example:

from pyspark.sql.functions import coalesce, col, to_date

def dynamic_date(col, frmts=("MM-dd-yyyy", "yyyy-MM-dd")):
    return coalesce(*[to_date(col, i) for i in frmts])

df.show(10,False)
#+------------------------+
#|timestamp               |
#+------------------------+
#|06-06-2019,17:15:46     |
#|2020-01-01T06:07:22.000Z|
#+------------------------+

df.withColumn("dd",dynamic_date(col("timestamp"))).show(10,False)
#+------------------------+----------+
#|timestamp               |dd        |
#+------------------------+----------+
#|06-06-2019,17:15:46     |2019-06-06|
#|2020-01-01T06:07:22.000Z|2020-01-01|
#+------------------------+----------+

推荐阅读