在 Pyspark 中将年份转换为日期格式

Convert day of year to Date Format in 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

old_date new_date
2006272(表示 2006 年第 272 天)
2008016 2008-01-16
2011179
2011026 2011-01-26

如何转换这种日期格式?

如果你不介意使用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"))

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

# Import functions
import pyspark.sql.functions as f


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