在 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'))
我有一个日期列为 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'))