Как фильтровать данные с помощью оконных функций в спарк

У меня есть следующие данные:

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». Могу ли я расширить это, чтобы отфильтровать строки, чтобы получить ожидаемые данные