argmax в Spark DataFrames: как получить строку с максимальным значением

Учитывая Spark DataFramedfЯ хочу найти максимальное значение в определенном числовом столбце'values'и получите строку (и), где было достигнуто это значение. Я могу, конечно, сделать это:

# 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()

но это неэффективно, так как требует двух проходов черезdf.

pandas.Series/DataFrame а такжеnumpy.array иметьargmax/idxmax методы, которые делают это эффективно (за один проход). Так же как и стандартный питон (встроенная функцияmax принимает ключевой параметр, поэтому его можно использовать для поиска индекса наибольшего значения).

Каков правильный подход в Spark? Обратите внимание, что я не против, получаю ли я все строки, где достигается максимальное значение, или просто какое-то произвольное (непустое!) Подмножество этих строк.

Ответы на вопрос(2)

Ваш ответ на вопрос