Word Count
MAPREDUCE – LE MAPPER
HADID | BIG DATA | Date
Le reducer. Le code du mapper de WordCount se trouve ci-après. Il gère les tâches
suivantes :
1: import [Link];
2: import [Link];
3: import [Link];
4: import [Link];
5:
6: public class WordCountReducer extends
Reducer<Text, IntWritable, Text, IntWritable> {
7:
8: @Override
9: public void reduce(Text key,
Iterable<IntWritable> values, Context context) throws
IOException, InterruptedException {
10:
11: int wordCount = 0;
12:
13: for (IntWritable value : values) {
14: wordCount = wordCount + [Link]();
15: }
16:
17: [Link](key, new IntWritable(wordCount));
18:
19: }
20:}
Le code du mapper de WordCount gère les tâches suivantes :
Lignes 1 à 4 : importation des classes Java nécessaires au fonctionnement du reducer.
Lignes 6 à 20 : définition de la classe WordCountReducer qui sera appelée par le
driver (cf. ligne 26 du driver).
Ligne 9 : indication du type des données en entrée du reducer. Il s’agit d’une liste de
couples (key, value), key étant de type Text (c’est un mot issu des œuvres de
Shakespeare, par exemple "the") et value étant une liste (Iterable) de valeurs de type
IntWritable (il s’agit d’une liste des 1 émis par les mappers à chaque occurrence de
"the").
Ligne 11 : mise à zéro du compteur des différentes occurrences d’un mot.
Lignes 13 à 15 : ces lignes sont le cœur du reducer.
PAGE 1
Ligne 13 : les différentes occurrences (cf. boucle for) du mot passé dans key sont
comptées (ligne 14). Plutôt que d’ajouter 1 à la variable wordCount, on ajoute
[Link]() ce qui revient exactement au même dans le cas de l’exemple de
WordCount.
Ligne 17 : une fois que toute la liste de comptage a été parcourue, le mapper écrit le
mot (key) et le résultat du comptage (wordCount) dans l’objet context. Comme la
variable wordCount est initialement définie comme variable du type Java int (cf. ligne
11) elle doit être convertie au type Hadoop IntWritable (cf. ligne 17, new
IntWritable(wordCount)) avant de pouvoir être écrite.
PAGE 2