2016-09-24 3 views
0

Ich bin ein bisschen neu zu Spark und ich versuche, eine einfache Zuordnung zu tun.
Meine Daten sind wie folgt aus:Das erste Element für ein Tupel für jede Zeile in einer Liste in pyspark erhalten

RDD((0, list(tuples)), ..., (19, list(tuples)) 

Was ich will, ist grabbing in jedem Tupel das erste Element zu tun, also letztlich so etwas wie dieses:

RDD((0, list(first item of each tuple),..., (19, list(first item of each tuple)) 

mir jemand kann helfen mit, wie um das zu kartieren?
Ich werde das zu schätzen wissen!

Antwort

2

können Sie mapValues verwenden, um die Liste von Tupeln auf eine Liste von Tupel zu konvertieren [0]:

rdd.mapValues(lambda x: [t[0] for t in x]) 
+0

Ah ja, das macht total Sinn. Vielen Dank @AChampion –

1

So ähnlich?

kv Hier bedeutet "Schlüssel-Wert" und Zuordnung itemgetter über die Werte. Also, map innerhalb einer map :-)

from operator import itemgetter 
rdd = sc.parallelize([(0, [(0,'a'), (1,'b'), (2,'c')]), (1, [(3,'x'), (5,'y'), (6,'z')])]) 
mapped = rdd.mapValues(lambda v: map(itemgetter(0), v)) 

Ausgabe

mapped.collect() 
[(0, [0, 1, 2]), (1, [3, 5, 6])] 
+0

I glaube, das OP sagte, die Liste ist eine Liste von Tupeln ... – AChampion

+0

Denke nicht so, da dies nur das erste Element der Liste zurückgibt, nicht das erste von jedem Tupel in der Liste - du wou ld brauche '(kv [0], [a [0] für ein in kv [1]])' aber vorausgesetzt, dass Sie nur die Werte beeinflussen, können Sie 'mapValues ​​()' verwenden, um zu vereinfachen – AChampion

+0

@ cricket_007 Ich habe versucht, was Sie sagten schon, und es gibt mir nur das erste Tupel in jedem Tupel. –

Verwandte Themen