如何解决获取上一季度月份的结束日期,并从 pyspark 的日期列中获取上一年的所有月份结束日期
我是 Python 和 pyspark 的新手。我正在处理具有整数格式日期的数据框。我必须从列中找到最大日期,并根据该日期我必须找到 -
- 过去 12 个月的结束日期。
- 上一季度月末日期
- 去年月末日期。
这是数据框
日期 |
---|
20201219 |
20201210 |
20201012 |
20200718 |
20200624 |
max_date(date) = 20201219
输出数据帧 -
custom_date | 信息 |
---|---|
20200731 | 上一季度 |
20200831 | 上一季度 |
20200930 | 上一季度 |
20201130 | 当年 |
20201031 | 当年 |
20200930 | 当年 |
20200831 | 当年 |
20200731 | 当年 |
20200630 | 当年 |
20200531 | 当年 |
20200430 | 当年 |
20200331 | 当年 |
20200229 | 当年 |
20200131 | 当年 |
20191231 | 当年 |
20191231 | 去年 |
20191130 | 去年 |
20191031 | 去年 |
20190930 | 去年 |
20190831 | 去年 |
20190731 | 去年 |
20190630 | 去年 |
20190531 | 去年 |
20190430 | 去年 |
20190331 | 去年 |
20190228 | 去年 |
20190131 | 去年 |
到目前为止,我已经尝试了一些鳕鱼,我能够获得当前年份,但仍然无法获得季度和上一年的数据
解决方法
您可以构建一些日期序列并将它们全部分解:
maxdate = df.select(F.to_date(F.max('date'),'yyyyMMdd').cast('string')).head()[0]
df2 = spark.sql(f"""
select explode(transform(sequence(trunc(to_date('{maxdate}'),'quarter') - interval 2 months,trunc(to_date('{maxdate}'),'quarter'),interval 1 month),x -> x - interval 1 day)) as custom_date,'prev quarter' as info
union all
select explode(transform(sequence(trunc(to_date('{maxdate}'),'month'),'month') - interval 11 month,interval -1 month),'current year' as info
union all
select explode(transform(sequence(trunc(to_date('{maxdate}'),'year'),'year') - interval 11 month,'prev year' as info
""")
df2.show(99)
+-----------+------------+
|custom_date| info|
+-----------+------------+
| 2020-07-31|prev quarter|
| 2020-08-31|prev quarter|
| 2020-09-30|prev quarter|
| 2020-11-30|current year|
| 2020-10-31|current year|
| 2020-09-30|current year|
| 2020-08-31|current year|
| 2020-07-31|current year|
| 2020-06-30|current year|
| 2020-05-31|current year|
| 2020-04-30|current year|
| 2020-03-31|current year|
| 2020-02-29|current year|
| 2020-01-31|current year|
| 2019-12-31|current year|
| 2019-12-31| prev year|
| 2019-11-30| prev year|
| 2019-10-31| prev year|
| 2019-09-30| prev year|
| 2019-08-31| prev year|
| 2019-07-31| prev year|
| 2019-06-30| prev year|
| 2019-05-31| prev year|
| 2019-04-30| prev year|
| 2019-03-31| prev year|
| 2019-02-28| prev year|
| 2019-01-31| prev year|
+-----------+------------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。