我需要一些Maven对以下情况的意见:
我有以下Dataframe 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 |
+------------+------------+-------+-------+
每个 group
订购人 OrderDate
在 descending
命令。订购后,每个 value
有 Current_date < (Date1 + 31Days) or Date1 as NULL
需要标记为 valid
直到 Current_date > (Date1 + 31Days)
. 贴上,每 Value
应标记为 Invalid
不管 Date1
价值观。
如果是一个 group
,所有记录都是 NULL
,所有 Value
应标记为 Valid
我的输出df应该如下所示:
+------------+------------+-------+-------+---------+
| 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
并将其另存为新Dataframe dfMin
.
然后我加入了 df1
以及 dfMin
在 group
并基于 row_number(row_number < min(row_number))
这种方法适用于大多数情况。但是什么时候 group
的所有值 Date1
是 NULL
,此方法失败。
有没有其他更好的方法也包括上述场景?
注意:我使用的是非常旧的spark版本- Spark 1.5
. 也 windows
函数在我的环境中不起作用(它是一个自定义框架,有很多限制)。为了 row_number
,我曾经 zipWithIndex
方法。
暂无答案!
目前还没有任何答案,快来回答吧!