Как фильтровать данные с помощью оконных функций в спарк
У меня есть следующие данные:
rowid uid time code
1 1 5 a
2 1 6 b
3 1 7 c
4 2 8 a
5 2 9 c
6 2 9 c
7 2 10 c
8 2 11 a
9 2 12 c
Теперь я хотел отфильтровать данные таким образом, чтобы я мог удалить строки 6 и 7, так как для определенного идентификатора пользователя я хочу сохранить только одну строку со значением 'c' в коде
Таким образом, ожидаемые данные должны быть:
rowid uid time code
1 1 5 a
2 1 6 b
3 1 7 c
4 2 8 a
5 2 9 c
8 2 11 a
9 2 12 c
Я использую оконную функцию примерно так:
val window = Window.partitionBy("uid").orderBy("time")
val change = ((lag("code", 1).over(window) <=> "c")).cast("int")
Это поможет нам идентифицировать каждую строку с кодом «c». Могу ли я расширить это, чтобы отфильтровать строки, чтобы получить ожидаемые данные