如何解决在 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"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。