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

nimxete2  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(598)

我正在使用databricks接收csv,并且有一个需要从字符串转换为时间戳的列。数据以字符串形式输入,格式如下:31-mar-27 10.59.00.000000pm gmt
我使用的代码是python,集群运行的是spark3.0.1。我以前使用过下面的代码,但没有使用am/pm或时区,我无法得到一个不为每个值返回null的格式

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 帮助

n53p2ov0

n53p2ov01#

因为时间戳中有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')
)

注意,不需要强制转换为timestamp类型,因为 to_timestamp 已返回时间戳类型列。

相关问题