2015-06-11 16 views
23

Vorrei dividere le coppie K/V in base ai valori e quindi prendere i cinque valori più grandi. Sono riuscito a farlo con il ripristino di K/V con la prima mappa, l'ordinamento in ordine decrescente con FALSE, e quindi l'inversione di chiave.valore all'originale (seconda mappa) e quindi prendere i primi 5 che sono i bigget, il codice è questo:takeOrdered discendente Pyspark

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

so che c'è un'azione takeOrdered su pySpark, ma ho solo riuscito a ordinare sui valori (e non sulla chiave), non so come ottenere un discendente di ordinamento:

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

RDD.takeOrdered (5, lambda (word, count): -count) – Tagar

+0

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

risposta

59

Ordina per chiave (crescente):

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

ordine di tasti (discendente):

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

ordine di valori (crescente):

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

ordine di valori (discendente):

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

ero così vicino, ho provato RDD.takeOrdered (-5, chiave = lambda x: x [1]) per ottenere l'ultimo che hai postato. Grazie – arj

+0

Molto utile! Per ottenere il primo: RDD.takeOrdered (1, chiave = lambda x: -x [1]) – UmbySlipKnot