微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取上一季度月份​​的结束日期,并从 pyspark 的日期列中获取上一年的所有月份结束日期

如何解决获取上一季度月份​​的结束日期,并从 pyspark 的日期列中获取上一年的所有月份结束日期

我是 Python 和 pyspark 的新手。我正在处理具有整数格式日期的数据框。我必须从列中找到最大日期,并根据该日期我必须找到 -

  1. 过去 12 个月的结束日期。
  2. 上一季度月末日期
  3. 去年月末日期。

这是数据框

日期
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 举报,一经查实,本站将立刻删除。