Java Hadoop文本类集合方法

Java Hadoop文本类集合方法,java,hadoop,hadoop2,Java,Hadoop,Hadoop2,以下是Hadoop的WordCount示例中的代码示例: class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> { private Text outputKey; private IntWritable outputVal; @Override public void setup(Context context) { outputKey = new

以下是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设置不同的单词并作为上下文的键写入。outputKey实例是否在整个对中共享


为什么不使用context.writenew Textstk.nextToken,新的IntWritable1?

这只是为了提高效率

阅读本文:


例如,如果使用org.apache.hadoop.io.Text作为映射输出键,则可以在Mapper类中创建文本对象的单个非静态最终实例。然后每次调用map方法时,您可以清除或只是设置单数文本实例,然后将其写入映射器的上下文中。然后,上下文将在再次调用map方法之前使用/复制数据,这样您就不必担心覆盖框架正在使用的数据。

这只是为了提高效率

阅读本文:

例如,如果使用org.apache.hadoop.io.Text作为映射输出键,则可以在Mapper类中创建文本对象的单个非静态最终实例。然后每次调用map方法时,您可以清除或只是设置单数文本实例,然后将其写入映射器的上下文中。然后,上下文将在再次调用map方法之前使用/复制数据,这样您就不必担心覆盖框架正在使用的数据