во втором окне см. обновление
ужно выполнить описанную ниже операцию с кадрами данных, используя оконную функцию Lag and Lead.
Для каждого ключа мне нужно выполнить приведенную ниже вставку и обновить в окончательном выводе
Введите условие:
1. По умолчанию LAYER_NO = 0 необходимо записать в вывод.
2. Если есть какие-либо изменения в значениях COL1, COL2, COL3, в соответствии с их ценной записью, то эти записи должны быть записаны в выводе.
Пример: key_1 с layer_no = 2, в COL3 происходит изменение значения с 400 на 600
Обновление Условия:
1. Если в значениях COL1, COL2, COL3 НЕТ изменений по сравнению с предыдущей записью, но есть изменения в «столбце DEPART», это значение необходимо обновить в выходных данных.
Пример: key_1 с layer_no = 3, в COL1, COL2, COL3 не было никаких изменений, но в столбце DEPART есть изменение значения как "xyz", поэтому его необходимо обновить в выходных данных.
2. Даже LAYER_NO должен обновляться последовательно, после вставки записи с layer_no = 0
val inputDF = values.toDF("KEY","LAYER_NO","COl1","COl2","COl3","DEPART")
inputDF.show()
+-----+--------+----+----+----+------+
| KEY|LAYER_NO|COL1|COL2|COL3|DEPART|
+-----+--------+----+----+----+------+
|key_1| 0| 200| 300| 400| abc|->default write
|key_1| 1| 200| 300| 400| abc|
|key_1| 2| 200| 300| 600| uil|--->change in col3,so write
|key_1| 2| 200| 300| 600| uil|
|key_1| 3| 200| 300| 600| xyz|--->change in col4,so update
|key_2| 0| 500| 700| 900| prq|->default write
|key_2| 1| 888| 555| 900| tep|--->change in col1 & col 2,so write
|key_3| 0| 111| 222| 333| lgh|->default write
|key_3| 1| 084| 222| 333| lgh|--->change in col1,so write
|key_3| 2| 084| 222| 333| rrr|--->change in col4,so update
+-----+--------+----+----+----+------+
Ожидаемый результат:
outputDF.show()
+-----+--------+----+----+----+------+
| KEY|LAYER_NO|COl1|COl2|COl3|DEPART|
+-----+--------+----+----+----+------+
|key_1| 0| 200| 300| 400| abc|
|key_1| 1| 200| 300| 600| xyz|
|key_2| 0| 500| 700| 900| prq|
|key_2| 1| 888| 555| 900| tep|
|key_3| 0| 111| 222| 333| lgh|
|key_3| 1| 084| 222| 333| rrr|
+-----+--------+----+----+----+------+