使用Pyspark将格式为MMM d yyyy hh:mm AM/PM的字符串转换为日期

使用Pyspark将格式为MMM d yyyy hh:mm AM/PM的字符串转换为日期,pyspark,Pyspark,我想在Pyspark中将格式为[MMM-dd-yyyy-hh:mm]AM/PM的字符串转换为date 输入数据: +-------------------+ | event_date| +-------------------+ |Jul 2 2020 5:45PM| |Jul 3 2020 12:02PM| |Oct 20 2020 12:07AM| |Jul 2 2020 6:23PM| +-------------------+ 预期产出: +---------

我想在Pyspark中将格式为
[MMM-dd-yyyy-hh:mm]AM/PM
的字符串转换为
date

输入数据:

+-------------------+
|         event_date|
+-------------------+
|Jul  2 2020  5:45PM|
|Jul  3 2020 12:02PM|
|Oct 20 2020 12:07AM|
|Jul  2 2020  6:23PM|
+-------------------+
预期产出:

+----------+
|event_date|
+----------+
|07-02-2020|
|07-03-2020|
|10-20-2020|
|07-02-2020|
+----------+

您的
事件\u日期的格式为
MMM d yyy hh:mmaa

如果要保留带有日期的时间戳,则:

from pyspark.sql import functions as F

df.withColumn("event_date_2", F.from_unixtime(F.unix_timestamp("event_date",\
        'MMM d yyyy hh:mmaa'),'MM-dd-yyyy HH:mm:ss')).show()

+-------------------+-------------------+
|         event_date|       event_date_2|
+-------------------+-------------------+
| Jul 2 2020  5:45PM|07-02-2020 17:45:00|
|Oct 20 2020 12:07AM|10-20-2020 00:07:00|
| Jul 3 2020 12:02PM|07-03-2020 12:02:00|
| Jul 2 2020  6:23PM|07-02-2020 18:23:00|
+-------------------+-------------------+
或者,如果您只想将其转换为日期,则使用
to_date
功能

from pyspark.sql.functions import col

df.withColumn("event_date_2", F.to_date(col('event_date'), "MMM d yyyy hh:mmaa")).show()

+-------------------+------------+
|         event_date|event_date_2|
+-------------------+------------+
| Jul 2 2020  5:45PM|  07-02-2020|
|Oct 20 2020 12:07AM|  10-20-2020|
| Jul 3 2020 12:02PM|  07-03-2020|
| Jul 2 2020  6:23PM|  07-02-2020|
+-------------------+------------+

您好@Cena谢谢您在转换日期格式方面帮助我。但是当我应用代码时,我得到了下面的错误。Py4JJavaError:调用o742.showString时出错:org.apache.spark.SparkUpgradeException:由于spark 3.0的升级,您可能会得到不同的结果:无法识别DateTimeFormatter中的“MMM d yyyy hh:mmaa”模式。1) 您可以将spark.sql.legacy.timeParserPolicy设置为legacy,以恢复spark 3.0之前的行为。2) 您可以使用中的指南形成有效的日期时间模式,可能是因为在月份和日期之间有3个空格表示一位数的日期,2个空格表示两位数的日期?这些空格并不重要。即使中间有5个空格,代码也可以工作。我认为您的问题在于Spark(3.0及以上)的较新版本中使用的传统日期格式。设置回答中给出的火花配置。很好的建议,它有助于解决我的问题。衷心感谢您@CenaGlad的帮助@普拉文班迪