java - 为什么我们可以在WordCount示例中重用Text对象

标签 java hadoop mapreduce word-count

看完Hadoop示例:WordCount之后,我不明白为什么我们可以重用Text对象,而不是为每个写入操作“context.write(...)”创建一个新对象?

public class WordCount { 

 public static class TokenizerMapper
   extends Mapper<Object, Text, Text, IntWritable>{

   private final static IntWritable one = new IntWritable(1);

   **private Text word = new Text();**

   public void map(Object key, Text value, Context context
                    ) throws IOException, InterruptedException {
     StringTokenizer itr = new StringTokenizer(value.toString());
     while (itr.hasMoreTokens()) {

       // set other String in Text object
       **word.set(itr.nextToken());**
       **context.write(word, one);**
    }
}....

我的问题是每个映射任务中是否只有一个Text对象,在通过使用“word.set(...)”更改其内容之后,先前的结果键值对将受到影响,因为该键使用相同的Text对象及其内容现在已更改。

我错过了什么?预先感谢您纠正我...

最佳答案

重用对象是避免创建许多新对象的良好实践。因此,context.write(word, one)方法中的map()会填充并重新使用wordone对象。

context.write()将生成一个输出键/值对。 Hadoop框架将在调用context.write()时负责序列化数据。因此,您可以安全地重用map()方法中的对象。

关于java - 为什么我们可以在WordCount示例中重用Text对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51218541/

相关文章:

Hadoop 客户端和集群分离

javascript - 复合 CouchDB 键的最大值是多少?

mysql - SED 查找和替换 - MapReduce 文件

hadoop - InputSplit 映射器 JobTracker 交互

java - hibernate API 中的 ElementCollection createAlias

java - Android SQLite : Use of delete with LIMIT and OFFSET

hadoop - hive 没有值(value)

java - 通过 Intellij IDEA 运行 Hadoop MR 作业

java - 将 YouTube 数据 API 添加到 Android Studio

数据库实体的 Java 构建器范例