Die 'Gruppen' Operation der 'Shuffle' ist, die Daten in <key, List <value>>
Form zu ändern, aber mein reducer.py erkennt diese Liste nicht und behandelt sie weiterhin als eine Zeile der <key, value>
Form der Standardeingabe.Hadoop MapReduce Shuffle & Sort: Warum brauchen Sie eine Gruppenoperation?
Blick auf den Code unten:
for line in sys.stdin:
line = line.strip()
word, count = line.split('\t', 1)
Also, warum es dies tut? Ändert Hadoop Streaming <key, List <value>
Daten von <key, value>
Formular in der Standardeingabe? Wenn ja, warum brauchen Sie den Gruppenbetrieb? 'Sortieren' Operation direkt auf den gleichen Schlüssel sort zusammen, und dann Zeile für Zeile der Eingabe in die reduce.py ist nicht das Gleiche?
reducer.py:
import sys
current_word = None
current_count = 0
word = None
for line in sys.stdin:
line = line.strip()
word, count = line.split('\t', 1)
try:
count = int(count)
except ValueError:
continue
if current_word == word:
current_count += count
else:
if current_word:
print('%s\t%s' % (current_word, current_count))
current_word = word
current_count = count
if current_word == word:
print('%s\t%s' % (current_word, current_count))
sys.exit(0)
Angenommen, es ist ein Beispiel der Worthäufigkeitsstatistik, die die Anzahl der Vorkommen von a, b, c, d zählt.
1. Mit dem 'Gruppe' Betrieb, werden die Daten wie:
(b,[2,3])
(c,[1,5])
(d,[3,6])
(a,[2,4])
2.With die 'sort' Operation, die Daten werden wie:
(a,[2,4])
(b,[2,3])
(c,[1,5])
(d,[3,6])
3.reducer. py beim Empfang von Daten, werden die Daten wie:
(a,2)
(a,4)
(b,2)
(b,3)
(c,1)
(c,5)
(d,3)
(d,6)
So mag ich wissen, wer Stufe 2 in Stufe 3 hergestellt. Und wenn es keinen Schritt ‚Gruppe‘:
1.Without der ‚Gruppe‘ Betrieb, aber mit der ‚Art‘ Operation, auch die Daten werden wie:
(a,2)
(a,4)
(b,2)
(b,3)
(c,1)
(c,5)
(d,3)
(d,6)
2.reducer.py erhält die obigen Daten, ist es nicht OK? Ich verstehe nicht. :-)
Fest Ihren Lauf zu verstehen auf Sätze. Fragen Sie nach dem "Shuffle" -Stadium von mapreduce? –
Ja, sehr leid. Ich fragte die Shuffle-Bühnengruppe. – Gary