hadoop文本类集合方法

ruarlubt  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(293)

以下是hadoop的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);
        }
    }
}

只有一个 outputKey 示例。在 while 回路, outputKey 设置不同的单词,并将其作为 context . 是 outputKey 示例在整个系统中共享 <key, value> 对?
为什么不用 context.write(new Text(stk.nextToken()), new IntWritable(1)) ?

wko9yo5t

wko9yo5t1#

只是为了提高效率。
阅读本文:http://www.joeondata.com/2014/05/22/memory-management-in-hadoop-mapreduce/.
“例如,如果使用org.apache.hadoop.io.text作为Map输出键,则可以在mapper类中创建一个文本对象的非静态最终示例。然后每次调用map方法时,您可以清除或只是设置单数文本示例,然后将其写入Map器的上下文中。然后,上下文将在再次调用map方法之前使用/复制数据,这样您就不必担心覆盖框架使用的数据。”

相关问题