pyspark - 使用 Pyspark 将列从字符串转换为时间戳
问题描述
我有 2 列(Violation_Time、Time_First_Observed)的 pyspark 数据框,它们被捕获为字符串。数据样本如下,其中它被捕获为 HHmm,“A”或“P”代表上午或下午。此外,在某些条目超过 24HH 的情况下,数据存在错误。
Violation_Time Time_First_Observed
0830A 1600P
1450P 0720A
1630P 2540P
0900A 0100A
我想使用 pyspark 删除两列的“A”和“P”,然后将数据(例如,0800、1930 等)转换为时间戳以进行分析。我试图为“Violation_Time”列执行此操作并创建一个新列“timestamp”来存储它(参见下面的代码)。但是,我似乎无法做到这一点。感谢您提供任何形式的帮助,谢谢。
sparkdf3.withColumn('timestamp',F.to_timestamp("Violation_Time", "HH"))
sparkdf3.select(['Violation_Time','timestamp']).show()
解决方案
您可以使用以下
sparkdf3 = sparkdf3.withColumn('timestamp', func.split(func.to_timestamp('Violation_Time', 'HHmm'), ' ').getItem(1))
sparkdf3.select(['Violation_Time','timestamp']).show()
解释
sparkdf3.withColumn('timestamp',
func.split(
func.to_timestamp('Violation_Time', 'HHmm') #Convert to timestamp. It will convert in datetime format
, ' '
).getItem(1) #Split on space and get first item
)
推荐阅读
- django - Django添加多个下拉菜单并在管理面板中选择值
- sql - 如果列中的相同数据将获取有条件的数据,如何选择数据
- c# - 定义一个函数来接受一个特定的列表参数
- python - 如何在pygame中制作“鼠标按下”循环
- python - 我想为python中的范围内的变量赋值
- php - 使用 PHP 调用 Python 脚本时拒绝执行
- c++ - 对作为另一个类成员的函数的未定义引用
- scala - 带有 date_format 函数的 Spark 2.2 版本中的奇怪行为
- node.js - 使用 Dockerfile 时如何刷新 shell?
- python - PySpark:基于数据框中具有 UUID 的列添加新列