在 Pyspark 中将一年中的某一天转换为日期格式

问题描述

我有一个日期列为 yyyyddd 的 pySpark 数据框,其中 yyyy 是年份(格式 2020、2021),ddd 是年份中的日期(格式 001、365、 366)。

我正在尝试将其转换为日期:

df = df.withColumn("new_date",to_date("old_date","yyyyddd"))

但这仅给了我 1 月日期的正确答案,而所有其他月份的答案为“Null”。

old_date 是 StringType,new_date 是 DateType

旧日期 新日期
2006272(表示 2006 年的第 272 天)
2008016 2008-01-16
2011179
2011026 2011-01-26

如何转换这种日期格式?

解决方法

您可以使用 D 格式表示 day of year 函数中的 unix_timestamp,如下所示。您不需要 UDF 来执行此操作

# Import functions
import pyspark.sql.functions as f


df.withColumn("new_date",f.from_unixtime(f.unix_timestamp("old_date",'yyyyD'),'yyyy-MMdd'))
,

如果您不介意使用 udf,则可以使用 datetime

import datetime
import pyspark.sql.functions as F
from pyspark.sql.types import DateType

udf_todate = F.udf(lambda x: datetime.datetime.strptime(x,'%Y%j'),DateType())

df = df.withColumn("new_date",udf_todate("old_date"))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...