Nun, das MapReduce
Paradigma ist ein Schlüssel-Wert-Paare, die jeder Mapper im exakten Format ausgeben sollte.
Wie beim Reducer, garantiert das Hadoop-Framework, dass jeder Reducer, der einen Shuffle-Sort-Algorithmus verwendet, alle Werte für einen bestimmten Schlüssel erhält. Es gibt also keine Möglichkeit, dass zwei verschiedene Reducer unterschiedliche Einträge vom selben Schlüssel erhalten.
Ein Reduzierer kann jedoch mehrere Schlüsselwerte verarbeiten.
Was Ihre Frage, lassen Sie uns annehmen, dass Sie drei verschiedene Werte für den gleichen Schlüssel haben, zum Beispiel:
Nike $109.99
Nike $45.99
Nike $294.99
Das Reduktionsmittel wird zunächst 2-Werte erhalten, so dass Ihre Minderer Funktion basiert auf dem Schlüssel wird die bekommen Werte:
und benötigen sollten die höchste mit einfachen Vergleich zum Ausgang und der Ausgang $109.99
sein, die der Eingang zum 2. Mal laufen wird Ihre Minderer Funktion diesmal mit dem Eingang sein wird:
Und wieder den Vergleich mit Ihnen den höchsten Wert Ausgang sollte, nämlich: $294.99
Wie für den Code, müssen Sie eine sehr einfache Funktion, so etwas wie:
EDIT: Ich nehme an, Ihre Trennzeichen Tab ist, aber Sie können das Format ändern, was auch immer Sie verwenden
#!/usr/bin/env python
import sys
current_word = None
current_max_count = 0
word = None
# input comes from STDIN
for line in sys.stdin:
# remove leading and trailing whitespace
line = line.strip()
# parse the input we got from mapper.py
word, count = line.split('\t', 1)
# convert count (currently a string) to int
try:
count = int(count)
except ValueError:
# count was not a number, so silently
# ignore/discard this line
continue
# this IF-switch only works because Hadoop sorts map output
# by key (here: word) before it is passed to the reducer
if current_word == word:
if count > current_max_count:
current_max_count = count
else:
if current_word:
# write result to STDOUT
print '%s\t%s' % (current_word, current_max_count)
current_max_count = count
current_word = word
# do not forget to output the last word if needed!
if current_word == word:
print '%s\t%s' % (current_word, current_max_count)
Wie werden Ihre Daten formatiert? Wird es in ein Diktat geladen, wird es in einer TXT-Datei gespeichert usw.? – TheLazyScripter
Es wird in einer Textdatei gespeichert, die ich später importieren würde. – Praneeth