2016-05-21 6 views
-1

Ich habe eine RDD mit Format: (Datum, Stadt). Und die Innen Daten ist so etwas wie dieses:Spark Python meisten wiederholten Wert für jeden Schlüssel

day1, city1 
day1, city2 
day1, city2 
day2, city1 
[...] 

Ich brauche die meisten „wiederholt“ Stadt von jedem Tag zu erhalten, dh ich brauche folgendes Ergebnis:

day1, city2 
day2, city1 
day3, ... 

Können Sie mir helfen, wie man mach es in Python?

Ich habe versucht, es wie ein einfaches wordcount zu tun:

rdd.map(lambda x: (x[0], [1]. \ 
map(lambda y:y,1). \ 
reduceByKey(lambda a,b: a+b). \ 
takeOrdered(1, lambda s:-1*s[1]))).collect() 

Aber natürlich ist es nicht funktioniert ...

Vielen Dank im Voraus.

+2

sollten einfach sein, wenn Sie SQL kennen. Kannst du bitte deine Frage bearbeiten, um zu beschreiben, was du versucht hast? –

+0

Danke cricket_007 für deine Kommentare und entschuldige dich falls die Frage nicht richtig gestellt wurde. – IGN

Antwort

0

Es ist nur eine modifizierte wordcount:

rdd.map(lambda x: (x, 1)) \ 
    .reduceByKey(lambda x, y: x + y) \ 
    .map(lambda ((day, city), count): (day, (city, count))) \ 
    .reduceByKey(lambda x, y: max(x, y, key=lambda x: x[1])) 
+0

Danke! Es funktioniert perfekt, genau das brauche ich :) – IGN

Verwandte Themen