pyspark将字符串转换为包含两种不同格式的日期时间戳列

8xiog9wr  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(326)

我正在处理芝加哥数据集,日期列是字符串格式,由日期组成,但有两种不同的格式:

Row(Date='01/10/2008 12:00'),
Row(Date='02/25/2008 08:20:53 PM')

我找到了下面的代码并尝试了这两种格式(我不确定是否正确),但由于它包含两种格式,下面的两种代码都收到了找不到格式的错误消息。

data_clean = data_clean.withColumn("Date_dt", f.from_unixtime(f.unix_timestamp("Date",'MM/dd/yy hh:mm:ss aa'),'MM/dd/yyyy HH:mm:ss'))
data_clean.withColumn("Date_dt", to_timestamp("Date", "MM/dd/yy HH:mm")).show(1, False)

我也找到了以下解决方案,但我需要有一个日期时间格式,包括小时和分钟作为输出:

from pyspark.sql.functions import coalesce, to_date
def to_date_(col, formats=("MM/dd/yyyy", "yyyy-MM-dd")):
    return coalesce(*[to_date(col, f) for f in formats])

您有什么建议来检查格式并根据它转换格式?

eagi6jfj

eagi6jfj1#

你可以用 date_format 要将解析的日期转换为所需的格式,请执行以下操作:

import pyspark.sql.functions as F

df.show(truncate=0)
+----------------------+
|date                  |
+----------------------+
|01/10/2008 12:00      |
|02/25/2008 08:20:53 PM|
+----------------------+

df2 = df.withColumn(
    'date2', 
    F.date_format(
        F.coalesce(
            F.to_timestamp('date', 'MM/dd/yyyy hh:mm:ss a'), 
            F.to_timestamp('date', 'MM/dd/yyyy HH:mm')
        ), 
        'MM/dd/yyyy HH:mm'
    )
)

df2.show(truncate=0)
+----------------------+----------------+
|date                  |date2           |
+----------------------+----------------+
|01/10/2008 12:00      |01/10/2008 12:00|
|02/25/2008 08:20:53 PM|02/25/2008 20:20|
+----------------------+----------------+

相关问题