2016-03-20 3 views
0

In MapReduce-Programm, Reducer-Methode nimmt eine Eingabeform Mapper als "Wörter" und es ist Länge.Reducer-Code zum Gruppieren der Wörter nach ihrer Länge

ex.input :- 
     Hi -2 
     how - 3 
     are -3 
     you - 3 
     ? - 1 

Jetzt brauche ich einen Reducer so zu schreiben, dass es durch die Gruppierung „Wortlänge“ einen Ausgang gibt und alle Wörter unter auf der Grundlage des Wortes in einer Kategorie kommt‘Länge wie unten

ex. Output :- 
     1 - [?] 
     2 - [hi] 
     3 - [how, are, you] 

Hier ist mein Mapper Programm:

public void map(LongWritable key, Text values, OutputCollector<Text, IntWritable> Output, Reporter arg3) throws IOException { 
    String s = values.toString(); 

    for (String word : s.split(" ")) { 
     if (word.length() > 0) { 
      Output.collect(new Text(word), new IntWritable(word.length())); 
     } 

    } 
} 

Wie ein Programm reduzieren wird?

+0

Ohne Absicht zu beleidigen, wenn Sie ein Programm nicht so einfach wie das in MapReduce entwerfen können, sollten Sie vielleicht zurückgehen und einige MapReduce Grundlagen lesen (z. B. ein Tutorial oder ein Buch). Es wird Ihnen viel Zeit sparen. – vefthym

Antwort

3

Wenn Sie Ihre Minderer Gruppe durch die Länge wollen, müssen Sie den Mapper haben müssen emittieren, um die Länge als Schlüssel und die Wörter, wie Werte, also statt:

 Hi -2 
    how - 3 
    are -3 
    you - 3 
    ? - 1 

emittieren

 2 - Hi 
    3 - how 
    3 - are 
    3 - you 
    1 - ? 

Dann haben Sie bereits das fertige Ergebnis als Eingabe für den Reducer. Je nach System, das Sie verwenden, können Sie den Reduzierer insgesamt ausschalten oder eine einfache Identitätsfunktion verwenden.

+0

Danke, es funktioniert für mich. Was wäre, wenn ich als "Word.length() + Summe des vorhandenen Wortes der gleichen Gruppe + alle Wörter" sammeln möchte. Ex. "3 - 5 [wie, bist, du, hast, die]" als Ausgabe von Reducer – user3302083

+0

Dann hast du ein anderes Map-Reduction-Problem. Einer ist wie oben beschrieben, der andere wäre es, vom Mapper (Länge, 1) zu emittieren und auf (Länge, Summe) zu reduzieren. Von oben kann ich mir keine Lösung vorstellen, die beide in einem Durchgang löst. – mtj

+0

Lustig, wie diese Dinge bleiben ... Grundsätzlich ist die Lösung ziemlich einfach. Sie mappen wie oben beschrieben, reduzieren von (Zahl, einzelnes_Wort) auf (Anzahl, Liste_von_Wörtern) und geben ((Anzahl, Liste_Länge), Liste_von_Wörtern) aus. – mtj