So filtern Sie Daten mithilfe von Fensterfunktionen in spark

Ich habe folgende Daten:

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

Jetzt wollte ich die Daten so filtern, dass ich die Zeilen 6 und 7 entfernen kann, da ich für eine bestimmte UID nur eine Zeile mit dem Wert 'c' im Code behalten möchte.

So sollten die erwarteten Daten sein:

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

Ich benutze die Fensterfunktion in etwa so:

val window = Window.partitionBy("uid").orderBy("time")
val change = ((lag("code", 1).over(window) <=> "c")).cast("int")

Dies würde uns helfen, jede Zeile mit einem Code 'c' zu identifizieren. Kann ich dies erweitern, um Zeilen herauszufiltern, um die erwarteten Daten zu erhalte

Antworten auf die Frage(2)

Ihre Antwort auf die Frage