在一个pyspark数据帧中从两种不同的时间戳格式获取日期



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

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

我如何才能创建另一个";日期";列,只捕获基于时间戳字段的日期?理想的结果看起来像这个

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

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

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|
#+------------------------+----------+

最新更新