argmax nos Spark DataFrames: como recuperar a linha com o valor máximo

Dado um Spark DataFramedf, Quero encontrar o valor máximo em uma determinada coluna numérica'values'e obtenha as linhas em que esse valor foi atingido. Claro que posso fazer isso:

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

mas isso é ineficiente, pois requer duas passagensdf.

pandas.Series/DataFrame enumpy.array terargmax/idxmax métodos que fazem isso de forma eficiente (em uma passagem). O mesmo acontece com o python padrão (função internamax aceita um parâmetro-chave, para que possa ser usado para encontrar o índice do valor mais alto).

Qual é a abordagem correta no Spark? Observe que não me importo se recebo todas as linhas em que o valor máximo é atingido ou apenas algum subconjunto arbitrário (não vazio!) Dessas linhas.

questionAnswers(2)

yourAnswerToTheQuestion