Écrire le Mapper
Dans cette étape, vous allez écrire la classe Mapper pour traiter les données d'entrée et émettre des paires clé-valeur intermédiaires.
Ouvrez le terminal et suivez les étapes ci-dessous pour commencer.
Changez l'utilisateur en hadoop
puis basculez dans le répertoire personnel de l'utilisateur hadoop
:
su - hadoop
Créez un fichier Java pour la classe Mapper:
nano /home/hadoop/SpaceBattleMapper.java
Ensuite, ajoutez le code suivant au fichier SpaceBattleMapper.java
:
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Mapper.Context;
import java.io.IOException;
public class SpaceBattleMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
// Divisez la ligne d'entrée en mots
String[] words = value.toString().split("\\s+");
// Émettez une paire clé-valeur pour chaque mot
for (String w : words) {
word.set(w);
context.write(word, one);
}
}
}
Astuce: Vous pouvez copier le code dans la zone de saisie à droite et le coller avec Ctrl + Shift + V
dans l'éditeur nano ouvert. Appuyez sur Ctrl + O
pour enregistrer le fichier et appuyez sur Entrée
pour confirmer lorsque le nano vous le demande. Enfin, utilisez Ctrl + X
pour quitter l'éditeur.
La classe SpaceBattleMapper
étend la classe Mapper
du framework Hadoop. Elle est utilisée pour traiter des données d'entrée sous forme de paires clé-valeur, où la clé est un LongWritable
représentant le décalage en octets de la ligne dans le fichier d'entrée, et la valeur est un objet Text
représentant la ligne de texte.
La classe définit deux champs privés:
one
: Un objet IntWritable
avec une valeur constante de 1. Cela est utilisé comme valeur dans les paires clé-valeur émises.
word
: Un objet Text
utilisé pour stocker chaque mot extrait de la ligne d'entrée.
La méthode map
est redéfinie pour fournir la logique de mappage spécifique:
- La valeur
Text
d'entrée est convertie en chaîne de caractères et divisée en mots en fonction des espaces blancs.
- Pour chaque mot dans le tableau, l'objet
word
est défini sur ce mot, et une paire clé-valeur est émise avec le mot comme clé et one
comme valeur. Cela est fait à l'aide de la méthode context.write
.
Cette classe Mapper est conçue pour émettre une paire clé-valeur pour chaque mot dans les données d'entrée, avec le mot comme clé et l'entier 1 comme valeur. Cette configuration est couramment utilisée dans les applications de comptage de mots, où l'objectif est de compter le nombre d'occurrences de chaque mot dans un ensemble de données.