Ich habe einen Datenrahmen (Funke):Filtering Zeilen basierend auf Spaltenwerte in Funkendatenrahmen scala
id value
3 0
3 1
3 0
4 1
4 0
4 0
ich einen neuen Datenrahmen erstellen möchten:
3 0
3 1
4 1
benötigen alle Zeilen zu entfernen, nachdem 1 (Wert) für jede ID. Ich habe versucht mit Fensterfunktionen in Spark-Datumsrahmen (Scala). Aber konnte keine Lösung finden. Es sieht so aus, als ob ich in eine falsche Richtung gehe.
Suche nach einer Lösung in Scala.Thanks
Ausgabe mit monotonically_increasing_id
scala> val data = Seq((3,0),(3,1),(3,0),(4,1),(4,0),(4,0)).toDF("id", "value")
data: org.apache.spark.sql.DataFrame = [id: int, value: int]
scala> val minIdx = dataWithIndex.filter($"value" === 1).groupBy($"id").agg(min($"idx")).toDF("r_id", "min_idx")
minIdx: org.apache.spark.sql.DataFrame = [r_id: int, min_idx: bigint]
scala> dataWithIndex.join(minIdx,($"r_id" === $"id") && ($"idx" <= $"min_idx")).select($"id", $"value").show
+---+-----+
| id|value|
+---+-----+
| 3| 0|
| 3| 1|
| 4| 1|
+---+-----+
Die Lösung wird nicht funktionieren, wenn wir eine sortierte Transformation in dem ursprünglichen Datenrahmen tun. Die monotonically_increasing_id() wird auf der Grundlage von ursprünglichen DF eher diese sortierte DF generiert. Ich habe diese Anforderung zuvor verpasst.
Alle Vorschläge sind willkommen.
Und was hast du versuchen, so weit? – eliasah
@eliasah Ich versuchte einige Experimente basierend auf der Antwort hier http://stackoverflow.com/questions/32148208/how-do-i-compare-multiple-rows-of-a-table-using-spark-sql-data- Rahmen-udf. aber bisher kein Erfolg – John
Ist Ihr DF sortiert? –