我是 Hadoop 的新手,并且与Mapper参数混淆。
将众所周知的 WordCount 作为样本:
class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
private Text outputKey;
private IntWritable outputVal;
@Override
public void setup(Context context) {
outputKey = new Text();
outputVal = new IntWritable(1);
}
@Override
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
StringTokenizer stk = new StringTokenizer(value.toString());
while(stk.hasMoreTokens()) {
outputKey.set(stk.nextToken());
context.write(outputKey, outputVal);
}
}
}
请参阅map
函数,参数为Object key
,Text value
和Context context
,我对Object key
的样子感到困惑(你看, key
函数中从不使用Map
。
由于输入文件格式如下:
Deer
Beer
Bear
Beer
Deer
Deer
Bear
...
我知道 值 看起来像每一行Deer
,Beer
,依此类推。它们是逐行处理的。
但 键 是怎样的?如何确定 密钥 应使用哪种数据类型?
答案 0 :(得分:1)
此处的所有内容取决于您使用的InputFormat
课程。它解析输入数据源并为您提供(Key,Value)对。不同的输入格式实现可以为您提供不同的流,即使具有相同的输入源。
以下是展示方法的文章:
这里的主要驱动因素是RecordReader
。