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? Обратите внимание, что я не против, получаю ли я все строки, где достигается максимальное значение, или просто какое-то произвольное (непустое!) Подмножество этих строк.