python - 从一个 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|
解决方案
我认为我们需要为这种情况定义一个函数并在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|
#+------------------------+----------+
推荐阅读
- ios - 每次触摸结束时创建一个新精灵
- android - 我如何使用从 Android Studio 生成的 Keystore 在 react native 中?
- mysql - 从代码中的命令行输入 mysql 后,试图让 Mysql 命令行回到 bash?
- sql - Postgresql 尝试在函数中使用执行格式,但在合并中给出字符串格式时出现未找到列的错误
- r - 根据匹配的列名将数据框每一列中的所有值乘以另一个值
- node.js - 使用云任务和云功能
- azure-devops - Azure Pipelines - 如何使用 git mono repo 策略按应用程序/文件夹列出提交和工作项
- python - 在 Python 中对元组列表进行分类
- jenkins - Jenkins Pipeline 从列表中创建目录
- html - 如何获取选择的html