在Hadoop MapReduce中,Mapper类主要用于处理输入数据并将其转换为中间键值对。下面是一个基本的Mapper类示例,使用Java编写,该示例将文本文件中的每一行作为输入,并将每个单词映射为其出现次数(1)。
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
context.write(word, one);
}
}
}
在这个例子中:
WordCountMapper
类扩展了Mapper
类。map()
方法是主要的映射逻辑,它接收一个键(行号,类型为LongWritable
),一个值(行内容,类型为Text
),以及一个Context
对象来写入中间结果。- 使用
StringTokenizer
将每行分割成单词。 - 每个单词被设置为
word
对象,然后与one
对象一起写入上下文,表示该单词出现一次。
注意,你需要根据你的具体需求来调整这个示例,例如更改输入和输出类型,或者修改映射逻辑。