使用Pyspark将列从字符串转换为时间戳

使用Pyspark将列从字符串转换为时间戳,pyspark,apache-spark-sql,pyspark-sql,pyspark-dataframes,Pyspark,Apache Spark Sql,Pyspark Sql,Pyspark Dataframes,我有一个pyspark数据帧,它有两列(违规时间、首次观察到的时间),它们被捕获为字符串。数据样本如下所示,其中数据被捕获为HHmm,其中“A”或“P”表示am或pm。此外,当某些条目超过24小时时,数据存在错误 Violation_Time Time_First_Observed 0830A 1600P 1450P 0720A 1630P 2540P 0900A

我有一个pyspark数据帧,它有两列(违规时间、首次观察到的时间),它们被捕获为字符串。数据样本如下所示,其中数据被捕获为HHmm,其中“A”或“P”表示am或pm。此外,当某些条目超过24小时时,数据存在错误

Violation_Time          Time_First_Observed
0830A                   1600P
1450P                   0720A
1630P                   2540P
0900A                   0100A

我想使用pyspark删除两列的“A”和“p”,然后将数据(例如0800、1930等)转换为时间戳以进行分析。我尝试对“违规时间”列执行此操作,并创建一个新列“时间戳”来存储此内容(请参见下面的代码)。然而,我似乎无法做到这一点。任何形式的帮助都是非常感谢的,谢谢

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
)