apache-spark - 如何将所有日期格式转换为日期列的时间戳?
问题描述
我正在使用 PySpark 3.0.1 版。我正在读取一个 csv 文件作为具有 2 个日期列的 PySpark 数据框。但是当我尝试打印模式时,两列都填充为字符串类型。
上面附加的屏幕截图是 Dataframe 和 Dataframe 的架构。
如何使用pyspark将日期列中的行值转换为时间戳格式?
我尝试了很多东西,但所有代码都需要当前格式,但是如果我不知道 csv 文件中的格式是什么,如何转换为正确的时间戳。
我已经尝试了下面的代码,但这正在创建一个具有空值的新列
df1 = df.withColumn('datetime', col('joining_date').cast('timestamp'))
print(df1.show())
print(df1.printSchema())
解决方案
由于有两种不同的日期类型,您需要使用两种不同的日期格式进行转换,并合并结果。
import pyspark.sql.functions as F
result = df.withColumn(
'datetime',
F.coalesce(
F.to_timestamp('joining_date', 'MM-dd-yy'),
F.to_timestamp('joining_date', 'MM/dd/yy')
)
)
result.show()
+------------+-------------------+
|joining_date| datetime|
+------------+-------------------+
| 01-20-20|2020-01-20 00:00:00|
| 01/19/20|2020-01-19 00:00:00|
+------------+-------------------+
如果要将全部转换为单一格式:
import pyspark.sql.functions as F
result = df.withColumn(
'datetime',
F.date_format(
F.coalesce(
F.to_timestamp('joining_date', 'MM-dd-yy'),
F.to_timestamp('joining_date', 'MM/dd/yy')
),
'MM-dd-yy'
)
)
result.show()
+------------+--------+
|joining_date|datetime|
+------------+--------+
| 01-20-20|01-20-20|
| 01/19/20|01-19-20|
+------------+--------+
推荐阅读
- excel - Excel:在 Excel 中匹配数据。通过拖动而不是手动输入来编写 IF 语句
- ios - AFNetworking 将 json 编号更改为不正确的字符串
- batch-file - 删除没有管理员权限的计划任务
- c# - 有效的文件路径,Path.GetFullPath 和 Core
- flutter - 扩展方法不满足接口所需的方法
- eclipse - 使用 Eclipse Checkstyle 插件时,如何修复“Property 'allowUndeclaredRTE' 不存在”错误?
- django - 在将对象传递给模板之前,如何添加或修改对象的属性?
- google-apps-script - Google Form:如何在提交时将所有上传的文件移动到特定文件夹?
- xml - xml读取操作
- javascript - 当按钮变为活动时单击按钮