问题描述
我有一个带时间戳字段的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|
解决方法
我认为我们需要为这种情况定义一个函数,并在 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|
#+------------------------+----------+