Ich bin sehr neu in MapReduce und habe ein Hadoop-Wortzählbeispiel abgeschlossen.
In diesem Beispiel wird eine unsortierte Datei (mit Schlüssel / Wert-Paaren) der Wortanzahl erstellt. Also ist es möglich, es nach der Anzahl der Wortvorkommen zu sortieren, indem eine andere MapReduce-Aufgabe mit der früheren kombiniert wird?
In der einfachen Wortzählung wird die Ausgabe, die wir erhalten, nach Wörtern sortiert. Beispielausgabe kann sein:
Apple 1
Junge 30
Katze 2
Frosch 20
Zebra 1
Wenn die Ausgabe nach der Anzahl der Wörter sortiert werden soll, d
1 Apfel
1 Zebra
2 Katze
20 Frosch
30 Junge
Sie können ein anderes MR-Programm unter Verwendung von unterem Mapper und Reducer erstellen, wobei die Eingabe die Ausgabe ist, die von einem einfachen Wortzählprogramm erhalten wird.
Die Ausgabe aus dem Hadoop MapReduce-Wordcount-Beispiel ist nach dem Schlüssel sortiert. Daher sollte die Ausgabe in alphabetischer Reihenfolge erfolgen.
Mit Hadoop können Sie Ihre eigenen Schlüsselobjekte erstellen, die die Schnittstelle WritableComparable
implementieren, sodass Sie die Methode compareTo
überschreiben können. Auf diese Weise können Sie die Sortierreihenfolge steuern.
Um eine Ausgabe zu erstellen, die nach der Anzahl der Vorkommen sortiert ist, müssten Sie wahrscheinlich einen weiteren MapReduce-Job hinzufügen, um die Ausgabe von der ersten Ausgabe zu verarbeiten, wie Sie gesagt haben. Dieser zweite Job wäre sehr einfach, vielleicht nicht einmal eine Reduzierungsphase. Sie müssten nur Ihr eigenes Writable
-Schlüsselobjekt implementieren, um das Wort und seine Häufigkeit zu umbrechen. Ein benutzerdefiniertes Schreibprogramm sieht etwa so aus:
Ich habe dieses Beispiel von hier genommen.
Sie sollten wahrscheinlich auch hashCode
, equals
und toString
überschreiben.
In Hadoop wird zwischen der Map- und der Reduce-Phase sortiert. Ein Ansatz zum Sortieren nach Wortvorkommen wäre die Verwendung eines benutzerdefinierten Gruppenkomparators, der nichts gruppiert; Daher ist jeder Aufruf zum Reduzieren nur der Schlüssel und ein Wert.
%Vor%Wie Sie bereits gesagt haben, besteht eine Möglichkeit darin, zwei Jobs zu schreiben. Erster Job: Einfaches Wordcount-Beispiel
Zweiter Job: Ist der Sortierbereich.
Der Pseudocode könnte sein:
Hinweis: Die vom ersten Job generierte Ausgabedatei ist die Eingabe für den zweiten Job
%Vor%Sie können auch in absteigender Reihenfolge sortieren, für die es möglich ist, eine separate Vergleichsklasse zu schreiben, die den Trick macht. Integrieren Sie den Komparator in den Job als:
%Vor%Dieser Komparator sortiert die Werte in absteigender Reihenfolge, bevor er zur Reduziererseite gesendet wird. Auf dem Reducer geben Sie einfach die Werte aus.
Tags und Links hadoop mapreduce parallel-processing word-count