使用Spark Scala满足条件后标记记录

问题描述

在以下情况下,我需要一些专家意见:

我有以下数据框df1

+------------+------------+-------+-------+
|   Date1    | OrderDate  | Value | group |
+------------+------------+-------+-------+
| 10/10/2020 | 10/01/2020 | hostA | grp1  |
| 10/01/2020 | 09/30/2020 | hostB | grp1  |
| Null       | 09/15/2020 | hostC | grp1  |
| 08/01/2020 | 08/30/2020 | hostD | grp1  |
| Null       | 10/01/2020 | hostP | grp2  |
| Null       | 09/28/2020 | hostQ | grp2  |
| 07/11/2020 | 08/08/2020 | hostR | grp2  |
| 07/01/2020 | 08/01/2020 | hostS | grp2  |
| NULL       | 07/01/2020 | hostL | grp2  |
| NULL       | 08/08/2020 | hostM | grp3  |
| NULL       | 08/01/2020 | hostN | grp3  |
| NULL       | 07/01/2020 | hostO | grp3  |
+------------+------------+-------+-------+

每个groupOrderDatedescending顺序排序。发布后,每个具有value的{​​{1}}都需要标记Current_date < (Date1 + 31Days) or Date1 as NULL,直到valid。 请注意,无论Current_date > (Date1 + 31Days)的值如何,每个Value都应标记Invalid

如果对于Date1,所有记录都是group,则所有NULL都应标记Value

我的输出df应该如下所示:

Valid

我的方法

我按+------------+------------+-------+-------+---------+ | Date1 | OrderDate | Value | group | Flag | +------------+------------+-------+-------+---------+ | 10/10/2020 | 10/01/2020 | hostA | grp1 | Valid | | 10/01/2020 | 09/30/2020 | hostB | grp1 | Valid | | Null | 09/15/2020 | hostC | grp1 | Valid | | 08/01/2020 | 08/30/2020 | hostD | grp1 | Invalid | | Null | 10/01/2020 | hostP | grp2 | Valid | | Null | 09/28/2020 | hostQ | grp2 | Valid | | 07/11/2020 | 08/08/2020 | hostR | grp2 | Invalid | | 07/01/2020 | 08/01/2020 | hostS | grp2 | Invalid | | NULL | 07/01/2020 | hostL | grp2 | Invalid | | NULL | 08/08/2020 | hostM | grp3 | Valid | | NULL | 08/01/2020 | hostN | grp3 | Valid | | NULL | 07/01/2020 | hostO | grp3 | Valid | +------------+------------+-------+-------+---------+ 订购后为每个row_number创建了group。 将我发布的OrderDate的每个min(row_number)都拥有Current_date > (Date1 + 31Days)并将其保存为新的数据帧group

然后我将其与dfMin上的df1dfMin合并,并根据group进行过滤

这种方法适用于大多数情况。但是,当对于row_number(row_number < min(row_number))的所有group的值为Date1时,此方法将失败。

还有其他更好的方法来包含上述情况吗?

注意:我使用的是旧版本的Spark- NULL。此外,Spark 1.5函数在我的环境中不起作用(它是一个自定义框架,并且有很多限制)。对于windows,我使用了row_number方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)