argmax in Spark DataFrames: Abrufen der Zeile mit dem Maximalwert

Einen Funken DataFrame @ gebdf, Ich möchte den Maximalwert in einer bestimmten numerischen Spalte finden'values' und erhalte die Zeile (n), in der / denen dieser Wert erreicht wurde. Das kann ich natürlich machen:

# it doesn't matter if I use scala or python, 
# since I hope I get this done with DataFrame API
import pyspark.sql.functions as F
max_value = df.select(F.max('values')).collect()[0][0]
df.filter(df.values == max_value).show()

aber das ist ineffizient, da es zwei Durchgänge durch @ erfordedf.

pandas.Series/DataFrame undnumpy.array habenargmax/idxmax Methoden, die dies effizient erledigen (in einem Durchgang). Genauso wie Standard-Python (eingebaute Funktionmax akzeptiert einen Schlüsselparameter, sodass der Index des höchsten Werts ermittelt werden kann.

Was ist der richtige Ansatz in Spark? Beachten Sie, dass es mir egal ist, ob ich alle Zeilen erhalte, bei denen der Maximalwert erreicht wird, oder nur eine beliebige (nicht leere!) Teilmenge dieser Zeilen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage