from pyspark.sql import Window w = Window.partitionBy('A') df.withColumn('maxB', f.max('B').over(w)) .where(f.col('B') == f.col('maxB')) .drop('maxB') .show() #+---+---+ #| A| B| #+---+---+ #| a| 8| #| b| 3| #+---+---+