SPARK-SCALA:使用更新的各自ID的新开始日期更新ID的结束日期
我想使用Spark Scala为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
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 |
+---+-----+----------+---------+