将带时区的字符串转换为时间戳 spark 3.0

Converting string with timezone to timestamp spark 3.0

我正在使用数据块来摄取 csv,并且有一列需要从字符串转换为时间戳。数据以字符串形式出现,格式如下:31-MAR-27 10.59.00.000000 PM GMT

我使用的代码是python,集群是运行 spark 3.0.1。我以前使用过下面的代码,但没有使用 AM/PM 或时区,我无法获得每个值 return 都为空的格式

df.withColumn('columnName', to_timestamp(col('columnName'),'dd-MMM-yy HH.mm.ss.SSSSSS a zzz').cast(TimestampType()))

我正在使用此文档https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html来帮助

由于您的时间戳中有 am/pm,因此您应该使用小写 h 表示 clock-hour-of-am-pm (1-12),而不是 H,它代表 hour-of-day (0-23)

df2 = df.withColumn(
    'columnName', 
    to_timestamp(col('columnName'), 'dd-MMM-yy hh.mm.ss.SSSSSS a zzz')
)

请注意,不需要转换为时间戳类型,因为 to_timestamp 已经 returns 时间戳类型列。