2015-06-11 12 views
23

K/V çiftlerini değerlere göre sıralamak ve en büyük beş değeri almak istiyorum. Bunu ilk harita ile K/V'yi geri almayı, FALSE ile azalan sırada sıralamayı ve daha sonra key.value'yu orijinal (ikinci harita) olarak geri almayı ve sonra bigget olan ilk 5'i almayı başardım, kod şudur:almakAyrıntılı Pyspark

RDD.map(lambda x:(x[1],x[0])).sortByKey(False).map(lambda x:(x[1],x[0])).take(5) 

i pySpark bir takeOrdered eylem olduğunu biliyorum, ama sadece değerler üzerinde bozdu (ve anahtar üzerinde) i sıralama bir inen nasıl bilmiyorum:

RDD.takeOrdered(5,key = lambda x: x[1]) 
+2

RDD.takeOrdered (5, lambda (kelime, sayım): -count) – Tagar

+0

https://spark.apache.org/docs/latest/api/python/pyspark.html#pyspark.RDD.takeSiparişli – arj

cevap

59

Anahtarlara göre sırala (artan):

(Azalan) tuşları ile

Türü: değerleri (artan) ile

RDD.takeOrdered(5, key = lambda x: -x[0]) 

Türü: değerleri

RDD.takeOrdered(5, key = lambda x: x[1]) 

üzere (azalan):

RDD.takeOrdered(5, key = lambda x: -x[1]) 
+0

Çok yakındım, Son gönderiminizi almak içinRDD.takeOrdered (-5, anahtar = lambda x: x [1]) . Teşekkürler – arj

+0

Çok faydalı! İlkini almak için: RDD.takeOrdered (1, anahtar = lambda x: -x [1]) – UmbySlipKnot