Bir Spark DataFrame df
verildiğinde, belirli bir sayısal sütun 'values'
'daki maksimum değeri bulmak ve bu değere ulaşıldığı satırı (satırları) almak istiyorum. Tabii bunu yapabilirsiniz:argmax: satırın maksimum değeriyle nasıl alınacağı
# 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()
ama df
iki geçiş gerektirir çünkü bu verimsizdir.
pandas.Series
/DataFrame
ve numpy.array
(bir geçişte) verimli bir şekilde yapmak argmax
/idxmax
yöntemleri vardır. Standart python (dahili fonksiyon max
bir anahtar parametresini kabul eder, bu yüzden en yüksek değerin indeksini bulmak için kullanılabilir).
Spark'de doğru yaklaşım nedir? Maksimum değerin elde edildiği tüm satırları veya bu satırların yalnızca bazı (boş olmayan!) Alt kümelerini alıp almamaya dikkat etmem.
çapraz dildir ve keyfi veri çalışabilirsiniz daha iyi bir çözüm yoktur. – zero323
@ zero323 RDD kodunu aşağıdaki DataFrame API'sinde Scala'ya dönüştürerek ve Catalyst'ün çalışabilmesi için uygun meta veriler ekleyerek aşağıdaki yanıtı neden kopyalamak imkansız? – max
Bu mümkündür, ancak Scala veya Python_ kullanırsanız _it'in önemli olmadığı varsayımını açıkça keser. Bunu, yalnızca SQL ile birlikte Orderable veri türleri ile de yapabilirsiniz, ancak bu genel bir çözüm olmayan özel bir durumdur. – zero323