Ich habe diesen Datenrahmen in PySpark. Ich möchte eindeutige Werte für col3 erhalten. In SQL würde ich nach col1 gruppieren und max(col3) als col3 erhalten
+----+----+----+ |col1|col2|col3| +----+----+----+ | 0| 1| 0| | 0| 1| 0| | 0| 1| 0| | 1| 1| 0| | 1| 1| 1| | 1| 1| 1| | 2| 1| 0| | 2| 1| 1| | 2| 1| 0| +----+----+----+
Dies ist die erwartete Ausgabe:
+----+----+----+ |col1|col2|col3| +----+----+----+ | 0| 1| 0| | 1| 1| 1| | 2| 1| 1| +----+----+----+
Sie können dieselbe Logik in pyspark .groupBy auf col1,col2 ausführen und dann agg den maximalen col3-Wert abrufen.
row_number
und partitionby
col1,col2 und orderby desc
col3 zu verwenden und nur die auszuwählenrownumber == 1
Example:
df.show()
#+----+----+----+
#|col1|col2|col3|
#+----+----+----+
#| 0| 1| 0|
#| 0| 1| 0|
#| 0| 1| 0|
#| 1| 1| 0|
#| 1| 1| 1|
#| 1| 1| 1|
#| 2| 1| 0|
#| 2| 1| 1|
#| 2| 1| 0|
#+----+----+----+
df.groupBy("col1","col2").agg(max("col3").alias("col3")).orderBy("col3").show()
#+----+----+----+
#|col1|col2|col3|
#+----+----+----+
#| 0| 1| 0|
#| 1| 1| 1|
#| 2| 1| 1|
#+----+----+----+
Using row_number():
from pyspark.sql.window import Window
w = Window.partitionBy("col1","col2").orderBy(desc("col3"))
df.withColumn("rn", row_number().over(w)).filter(col("rn") == 1).drop("rn").orderBy("col3").show()
#+----+----+----+
#|col1|col2|col3|
#+----+----+----+
#| 0| 1| 0|
#| 1| 1| 1|
#| 2| 1| 1|
#+----+----+----+
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen