Вы можете сделать ту же логику c в pyspark .groupBy на col1, col2 и затем agg получить максимальное значение col3.
- другим способом будет использование окна
row_number
функции и partitionby
col1, col2 и orderby desc
col3 и выберите только rownumber == 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|
#+----+----+----+