SPARK-SCALA:使用更新的各自ID的新开始日期更新ID的结束日期

SPARK-SCALA:使用更新的各自ID的新开始日期更新ID的结束日期,scala,apache-spark,hive,apache-spark-sql,Scala,Apache Spark,Hive,Apache Spark Sql,我想使用Spark Scala为id创建一个新列end\u date,其值为同一id的更新记录的start\u date列 考虑以下数据框: +---+-----+----------+ | id|Value|start_date| +---+---- +----------+ | 1 | a | 1/1/2018 | | 2 | b | 1/1/2018 | | 3 | c | 1/1/2018 | | 4 | d | 1/1/2018 | | 1 | e | 10/1/2

我想使用Spark Scala为
id
创建一个新列
end\u date
,其值为同一
id
的更新记录的
start\u date

考虑以下数据框:

+---+-----+----------+
| id|Value|start_date|
+---+---- +----------+
| 1 |   a | 1/1/2018 |
| 2 |   b | 1/1/2018 |
| 3 |   c | 1/1/2018 |
| 4 |   d | 1/1/2018 |
| 1 |   e | 10/1/2018|
+---+-----+----------+
此处
id=1
的初始开始日期为
1/1/2018
value
a
,而
10/1/2018(开始日期)
id=1
值成为
e
。因此,我必须在
10/1/2018
开始时为
id=1
填充一个新列
end\u date
,并为
end\u date
列的所有其他记录填充
NULL

结果应如下所示:

+---+-----+----------+---------+
| id|Value|start_date|end_date |
+---+---- +----------+---------+
| 1 |   a | 1/1/2018 |10/1/2018|
| 2 |   b | 1/1/2018 |NULL     |
| 3 |   c | 1/1/2018 |NULL     |
| 4 |   d | 1/1/2018 |NULL     |
| 1 |   e | 10/1/2018|NULL     |
+---+-----+----------+---------+
我使用的是spark 2.3

有人能帮我一下吗?这里有窗口功能“lead”:

输出:

+---+-----+----------+---------+
|id |Value|start_date|end_date |
+---+-----+----------+---------+
|3  |c    |1/1/2018  |null     |
|4  |d    |1/1/2018  |null     |
|1  |a    |1/1/2018  |10/1/2018|
|1  |e    |10/1/2018 |null     |
|2  |b    |1/1/2018  |null     |
+---+-----+----------+---------+
具有窗口功能“lead”:

输出:

+---+-----+----------+---------+
|id |Value|start_date|end_date |
+---+-----+----------+---------+
|3  |c    |1/1/2018  |null     |
|4  |d    |1/1/2018  |null     |
|1  |a    |1/1/2018  |10/1/2018|
|1  |e    |10/1/2018 |null     |
|2  |b    |1/1/2018  |null     |
+---+-----+----------+---------+