我有以下数据:
+-----------+-----------+-----------+-----+-----------+
| Env1_date | Env2_date | Env3_date | Pid | orderDate |
+-----------+-----------+-----------+-----+-----------+
| Null | Null | 1/9/2020 | abc | 10/6/2020 |
| Null | 1/9/2020 | 1/8/2020 | pqr | 10/4/2020 |
| 1/9/2020 | Null | Null | xyz | 10/2/2020 |
| 1/8/2020 | 1/7/2020 | Null | uvw | 10/1/2020 |
+-----------+-----------+-----------+-----+-----------+
我正在尝试创建 3 个新列,它们基本上说明是否Pid
对 env1、env2 和 env3 有效。为此,我首先orderDate
按降序对列上的记录进行排序(已在上表中排序)。
如果对于
Env1_date
,Env2_date
,Env3_date
, 最高记录是Null
, 它们被认为是有效的。在Null
记录之后,如果日期小于特定日期(在此示例中1/9/2020
),则认为其有效。任何其他记录都被标记为无效。如果顶部记录不是
NULL
,需要检查日期是否等于1/9/2020
。如果是这样,它们也被标记为有效
我的输出应如下所示:
+-----------+-----------+-----------+-----+-----------+-----------+-----------+-----------+
| Env1_date | Env2_date | Env3_date | Pid | orderDate | Env1_Flag | Env2_Flag | Env3_Flag |
+-----------+-----------+-----------+-----+-----------+-----------+-----------+-----------+
| Null | Null | 1/9/2020 | abc | 10/6/2020 | Valid | Valid | Valid |
| Null | 1/9/2020 | 1/8/2020 | pqr | 10/4/2020 | Valid | Valid | Invalid |
| 1/9/2020 | Null | Null | xyz | 10/2/2020 | Valid | Invalid | Invalid |
| 1/8/2020 | 1/7/2020 | Null | uvw | 10/1/2020 | Invalid | Invalid | Invalid |
+-----------+-----------+-----------+-----+-----------+-----------+-----------+-----------+
我正在尝试使用Spark 1.5
and来实现这一点scala
。
我尝试使用lag
功能。但无法包括所有场景。不知道如何解决这个问题。
有人可以在这里帮助我吗?
spark
注意:Windows 函数、toDf()、createDataFrame() 函数在我使用的中不起作用。它是一个自定义的火花环境,几乎没有限制