2015-06-11 13 views
23

Chciałbym posortować pary K/V według wartości, a następnie podjąć największe pięć wartości. Udało mi się to zrobić, przywracając K/V za pomocą pierwszej mapy, sortując w porządku malejącym z FALSE, a następnie odwracając key.value do oryginału (druga mapa), a następnie biorąc pierwsze 5, które są największym, kod jest następujący:takeOrdered malejąco Pyspark

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

wiem, że to działanie takeOrdered na pySpark, ale tylko udało się rozwiązać na wartości (a nie na klucz), nie wiem jak uzyskać malejąco sortowanie:

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

RDD.takeOrdered (5, lambda (słowo, liczba): -konta) – Tagar

+0

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

Odpowiedz

59

Sortuj według kluczy (rosnąco):

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

Sortowanie klawiszami (malejącym)

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

Sortowanie wartościami (wznoszących)

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

Sortowanie wartościami (malejącym)

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

Byłem tak blisko, próbowałem RDD.takeOrdered (-5, klucz = lambda x: x [1]) w celu uzyskania ostatniego, który opublikowałeś. Dzięki – arj

+0

Bardzo przydatne! Aby uzyskać pierwsze: RDD.takeOrdered (1, klucz = lambda x: -x [1]) – UmbySlipKnot