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.