如何使用pyspark函数处理日期格式的T和Z

Posted

技术标签:

【中文标题】如何使用pyspark函数处理日期格式的T和Z【英文标题】:How to handle T and Z in the date format using pyspark functions [duplicate] 【发布时间】:2020-03-25 21:00:10 【问题描述】:

在将日期字符串转换为我当前的时区后,我希望从日期字符串中提取年、月、日和小时。我创建了以下导致 null 的独立代码。不确定如何以我的数据中出现的时间格式处理 T 和 Z 分隔符。

from pyspark.sql.functions import unix_timestamp, from_unixtime

df = spark.createDataFrame(
    [("2020-02-28T09:49Z",)], 
    ['date_str']
)

df2 = df.select(
    'date_str', 
    from_unixtime(unix_timestamp('date_str', 'yyyy-MM-ddThh:mmZ')).alias('date')
)

df2.show()

以上结果 -

 +-----------------+----+
|         date_str|date|
+-----------------+----+
|2020-02-28T09:49Z|null|
+-----------------+----+

有人可以指导我如何处理并在此处打印日期吗?

【问题讨论】:

【参考方案1】:

对于这种情况,我们可以使用to_timestamp, from_unixtime(unix_timestamp()) 函数。

尝试使用 "yyyy-MM-dd'T'hh:mm'Z'"T,Z 括在单引号中!

Example:

df.select('date_str', to_timestamp('date_str',"yyyy-MM-dd'T'hh:mm'Z'").alias('date')).show()
df.select('date_str', from_unixtime(unix_timestamp('date_str', "yyyy-MM-dd'T'hh:mm'Z'")).alias('date')).show()

#+-----------------+-------------------+
#|         date_str|               date|
#+-----------------+-------------------+
#|2020-02-28T09:49Z|2020-02-28 09:49:00|
#+-----------------+-------------------+

【讨论】:

以上是关于如何使用pyspark函数处理日期格式的T和Z的主要内容,如果未能解决你的问题,请参考以下文章

通过pyspark读取日期时间格式(2017-01-12t141206)

PySpark:在日期为字符串的范围内按日期字段过滤DataFrame

如何格式化数据表中显示的日期

pyspark:如何以“yyyy-MM-dd HH”格式按日期列分区

DateFormatter 格式:2014-12-08T14:11:32.636Z

如何计算pyspark中的日期差异?