Apache spark 在Spark SQL中计算上一季度的第一天

Apache spark 在Spark SQL中计算上一季度的第一天,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,如何使用SQL API导出Spark SQL查询中与任何给定日期相关的上一个季度的第一天?所需样品如下: input_date | start_date ------------------------ 2020-01-21 | 2019-10-01 2020-02-06 | 2019-10-01 2020-04-15 | 2020-01-01 2020-07-10 | 2020-04-01 2020-10-20 | 2020-07-01 2021-02-04 | 2020-10-01 宿舍一

如何使用SQL API导出Spark SQL查询中与任何给定日期相关的上一个季度的第一天?所需样品如下:

input_date | start_date
------------------------
2020-01-21 | 2019-10-01
2020-02-06 | 2019-10-01
2020-04-15 | 2020-01-01
2020-07-10 | 2020-04-01
2020-10-20 | 2020-07-01
2021-02-04 | 2020-10-01
宿舍一般包括:

1 | Jan - Mar
2 | Apr - Jun
3 | Jul - Sep
4 | Oct - Dec
注意:我使用的是Spark SQL v2.4


感谢您的帮助。谢谢。

就我个人而言,我会使用excel或其他工具创建一个表,其中包含未来二十年的“从现在开始”日期,并仅引用该表。

使用3个月为负数的日期

df.withColumn("start_date", to_date(date_trunc("quarter", expr("input_date - interval 3 months"))))
  .show()

+----------+----------+
|input_date|start_date|
+----------+----------+
|2020-01-21|2019-10-01|
|2020-02-06|2019-10-01|
|2020-04-15|2020-01-01|
|2020-07-10|2020-04-01|
|2020-10-20|2020-07-01|
|2021-02-04|2020-10-01|
+----------+----------+

你的预期结果是什么?我的问题A中给出了输入和它们所需的输出。。。开始日期是结果,然后这是可能的。做-3个月和日期特鲁克。这是不可能的任何其他方式?对于e、 g.date_trunc(‘quarty’…)等来查找最后一个季度的第一个月,然后在结尾处concat‘01’来指定第一天?可能,多年来,我在十几个不同的系统中都这样做过,这从未失败过。