Pyspark 解析自定义日期格式

Posted

技术标签:

【中文标题】Pyspark 解析自定义日期格式【英文标题】:Pyspark parse custom date format 【发布时间】:2019-03-19 08:23:30 【问题描述】:

我面临这个挑战:我有一个复杂的日期格式,它是一个字符串。所以我使用unix_timestamp函数来解析它。

但是我找不到合适的模式来使用。我不知道时区、星期几和月份的正确缩写,也没有找到一个链接来澄清它们。

from pyspark.sql.functions import unix_timestamp

d =  spark.createDataFrame([(1,"Mon Jan 14 11:43:20 EET 2019"),\
                          (2,"Wed Jun 27 16:26:46 EEST 2018")],\
                          ["id","time_str"]) 

pattern = "aaa bbb dd HH:mm:ss ZZZ yyyy" 
d= d.withColumn("timestampCol", unix_timestamp(d["time_str"], pattern).cast("timestamp"))

d.show()
>>>
+---+------------------------------+------------+
|id |time_str                      |timestampCol|
+---+------------------------------+------------+
|1  |Mon Jan 14 11:43:20 EET 2019  |null        |
|2  |Wed Jun 27 16:26:46 EEST 2018 |null        |
+---+------------------------------+------------+

有人知道如何将此字符串正确转换为时间戳吗?

【问题讨论】:

【参考方案1】:

你可以试试下面的代码:

from pyspark.sql.functions import *
d =  spark.createDataFrame([(1,"Mon Jan 14 11:43:20 EET 2019"),\
                      (2,"Wed Jun 27 16:26:46 EEST 2018")],\
                      ["id","time_str"]) 

pattern = "EEE MMM dd HH:mm:ss z yyyy"
d.withColumn("timestamp", unix_timestamp(col("time_str"), pattern).cast("timestamp")).show(truncate=False)

它产生下面的输出。有关更多文档,您可以参考https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html,我曾经用它来查找EEEMMM,因为您每个工作日和每月分别有 3 个字符。

+---+-----------------------------+-------------------+
|id |time_str                     |timestamp          |
+---+-----------------------------+-------------------+
|1  |Mon Jan 14 11:43:20 EET 2019 |2019-01-14 09:43:20|
|2  |Wed Jun 27 16:26:46 EEST 2018|2018-06-27 13:26:46|
+---+-----------------------------+-------------------+

【讨论】:

IllegalArgumentException: Illegal pattern character: E。似乎不再支持:Symbols of ‘E’, ‘F’, ‘q’ and ‘Q’ can only be used for datetime formatting, e.g. date_format. They are not allowed used for datetime parsing, e.g. to_timestamp.spark.apache.org/docs/latest/sql-ref-datetime-pattern.html 用 'E' 解析日期的替代方法是什么?

以上是关于Pyspark 解析自定义日期格式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中解析自定义的多种日期格式

EXCEL表格日期格式自定义如何设置?

EXCEl表格里如何输入自定义格式的日期

在 pyspark SQL 中将字符串日期转换为日期格式

MagicalRecord 日期解析

怎么在excel中设置自定义日期格式