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

使用Spark Scala在满足条件后标记记录,scala,apache-spark,apache-spark-sql,apache-spark-1.5,Scala,Apache Spark,Apache Spark Sql,Apache Spark 1.5,我需要一些专家对以下情况的意见: 我有以下数据帧df1: +------------+------------+-------+-------+ | Date1 | OrderDate | Value | group | +------------+------------+-------+-------+ | 10/10/2020 | 10/01/2020 | hostA | grp1 | | 10/01/2020 | 09/30/2020 | hostB | grp1 | |

我需要一些专家对以下情况的意见:

我有以下数据帧
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  |
+------------+------------+-------+-------+
每个
OrderDate
的降序排列。订购后,每个
当前日期<(Date1+31天)或Date1为空
需要标记为
有效
,直到
当前日期>(Date1+31天)
。 在此之后,无论
Date1
值如何,每个
值都应标记为
无效

如果对于
,所有记录均为
,则所有
应标记为
有效

我的输出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   |
+------------+------------+-------+-------+---------+
我的方法:

在通过
OrderDate
订购后,我为每个
组创建了
行编号
。 张贴我正在获得每个
min(行编号)
具有
当前日期>(日期1+31天)
,并将其保存为新数据框
dfMin

然后,我在
group
上加入
df1
dfMin
,并根据
行数(行数

这种方法适用于大多数情况。但对于
而言,当
Date1
的所有值均为
NULL
时,此方法失败

是否有其他更好的方法也包括上述场景


注意:我使用的是相当旧的Spark版本-
Spark 1.5
。另外,
windows
function在我的环境中也不起作用(这是一个自定义框架,有很多限制)。对于
row\u number
,我使用了
zipWithIndex
方法。

这几天谁让我们参加了1.5的考试?我会升级。我完全同意@thebluephantom。但我的组织不是。