Pyspark 将字符串转换为日期时间戳列,包含两种不同的格式
Posted
技术标签:
【中文标题】Pyspark 将字符串转换为日期时间戳列,包含两种不同的格式【英文标题】:Pyspark Convert String to Date timestamp Column consisting two different formats 【发布时间】:2021-04-18 13:49:05 【问题描述】:我正在处理芝加哥数据集,日期列是字符串格式,由日期组成,但有两种不同的格式:
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])
您对检查格式并根据它进行转换有何建议?
【问题讨论】:
【参考方案1】:您可以使用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|
+----------------------+----------------+
【讨论】:
以上是关于Pyspark 将字符串转换为日期时间戳列,包含两种不同的格式的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PySpark 中将 unix 时间戳列转换为人类可理解的时间戳? [复制]