Написание Mapper
В этом шаге вы напишете класс Mapper для обработки входных данных и выдачи промежуточных пар ключ-значение.
Откройте терминал и следуйте шагам ниже, чтобы начать.
Перейдите в учетную запись hadoop
, а затем переключитесь в домашнюю директорию пользователя hadoop
:
su - hadoop
Создайте Java-файл для класса Mapper:
nano /home/hadoop/SpaceBattleMapper.java
Затем добавьте следующий код в файл 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 {
// Разделите входную строку на слова
String[] words = value.toString().split("\\s+");
// Выдайте пару ключ-значение для каждого слова
for (String w : words) {
word.set(w);
context.write(word, one);
}
}
}
Советы: Вы можете скопировать код из окна подсказок справа и вставить его с помощью Ctrl + Shift + V
в открытый редактор nano. Нажмите Ctrl + O
, чтобы сохранить файл, и Enter
, чтобы подтвердить, когда вас попросит nano-редактор. Наконец, используйте Ctrl + X
, чтобы выйти из редактора.
Класс SpaceBattleMapper
расширяет класс Mapper
из Hadoop-фреймворка. Он используется для обработки входных данных в виде пар ключ-значение, где ключ - это LongWritable
, представляющий байтовый сдвиг строки в входном файле, а значение - это объект Text
, представляющий строку текста.
Класс определяет два приватных поля:
one
: Объект IntWritable
с постоянным значением 1. Это используется в качестве значения в выдаваемых парах ключ-значение.
word
: Объект Text
, используемый для хранения каждого слова, извлеченного из входной строки.
Метод map
переопределяется для предоставления конкретной логики сопоставления:
- Входное значение
Text
преобразуется в строку и разделяется на слова по пробелу.
- Для каждого слова в массиве объект
word
устанавливается в это слово, и выдается пара ключ-значение с словом в качестве ключа и one
в качестве значения. Это делается с помощью метода context.write
.
Этот класс Mapper предназначен для выдачи пары ключ-значение для каждого слова в входных данных, где ключ - это слово, а значение - это целое число 1. Эта схема обычно используется в приложениях подсчета слов, где цель - подсчитать количество вхождений каждого слова в наборе данных.