2017-07-11 1 views
0

Ich möchte zum Beispiel auf den Schlüssel, nach, wie viele eindeutige Werte finden, nehme ich anPyspark - nach groupByKey und zähle eindeutigen Wert nach dem Schlüssel?

haben
x = sc.parallelize([("a", 1), ("b", 1), ("a", 1), ("b", 2), ("a", 2)]) 

Und ich habe mit groupByKey

sorted(x.groupByKey().map(lambda x : (x[0], list(x[1]))).collect()) 
x.groupByKey().mapValues(len).collect() 

der Ausgang wird durch die gleichen,

getan
[('a', [1, 1, 2]), ('b', [1, 2])] 
[('a', 3), ('b', 2)] 

Allerdings möchte ich verschiedene Werte in der Liste finden, sollte die Ausgabe wie sein,

[('a', [1, 2]), ('b', [1, 2])] 
[('a', 2), ('b', 2)] 

Ich bin sehr neu zu funken und versuche, die distinct() -Funktion irgendwo anzuwenden, aber alle fehlgeschlagen :-( Vielen Dank im Voraus!

Antwort

0

Sie statt Liste festlegen können -

sorted(x.groupByKey().map(lambda x : (x[0], set(x[1]))).collect()) 
+1

Bitte fügen Sie einige Erklärungen zu Ihrer Antwort hinzu. –

0

Sie Reihe von Ansätzen für gleiche versuchen. Ich löste es unter Ansatz: -

from operator import add 
x = sc.parallelize([("a", 1), ("b", 1), ("a", 1), ("b", 2), ("a", 2)]) 
x = x.map(lambda n:((n[0],n[1]), 1)) 
x.groupByKey().map(lambda n:(n[0][0],1)).reduceByKey(add).collect() 

OutPut: -

[('b', 2), ('a', 2)] 

Hoffnung Dies wird Ihnen helfen.

Verwandte Themen