根据Spark SQL中的条件合并记录

时间:2020-07-22 14:52:37

标签: apache-spark apache-spark-sql

我使用SQL API在Spark SQL(v 2.4.0)上工作。我有一个要求,要求根据条件使用sql查询合并记录。

有一个表,其中包含客户购买数据。要求是按顺序排列line_num的{​​{1}}并将每个记录与其下一个记录进行比较,并计算这两个记录的order_id之间的差异,并检查差异是否为<少于purch_dt天。现在,对所有后续记录保持相同的处理,直到遇到差异超过5天更多的记录-此时,将所有这些记录(到目前为止已读取)合并为一条记录并输出。但是,如果遇到一条记录,记录的差异更大大于5天,则不要合并该记录,而是将该记录视为“新”记录集的开头,然后使用来检查其后续记录相同的逻辑(如上所述),如果按照逻辑有效,则合并为一条记录。

请参见以下示例:

5

预期结果:

order_id | line_num | purch_dt 
10001 | 1 | 10-03-2020
10001 | 2 | 13-03-2020
10001 | 3 | 16-03-2020
10001 | 4 | 25-04-2020
10001 | 5 | 26-04-2020
22345 | 1 | 09-01-2020
22345 | 2 | 22-01-2020

对于订单order_id | purch_dt 10001 | 16-03-2020 10001 | 26-04-2020 22345 | 09-01-2020 22345 | 22-01-2020 ,前三个记录的日期之间的时间差彼此相差不到5天。因此,它们被视为单个集合,并且全部都合并到输出中的单个记录中。现在,对于第3条记录和第4条记录,它们之间的差异超过5天-因此,将第4条记录视为新记录的开始,然后将其与第5条记录合并到另一个新记录并输出。

对于订单'10001',两条记录之间的差异超过5天,因此将分别处理每条记录并输出。

任何人都可以帮助我使用sql查询解决此问题。

谢谢

0 个答案:

没有答案