在hadoop字数计算示例中,为什么不使文本也是静态的

在hadoop字数计算示例中,为什么不使文本也是静态的,hadoop,mapreduce,Hadoop,Mapreduce,在Hadoop字数计算示例中,IntWritable是静态的,因此可以在同一JVM中重用它,而不是创建新的。我的问题是为什么不让文本也保持静态? 我做到了,并且工作得很好,但在任何例子中都没有看到。我错过什么了吗 private ***static*** Text word = new Text(); private final static IntWritable intWritable = new IntWritable(1); 最初的单词计数示例 public stati

在Hadoop字数计算示例中,IntWritable是静态的,因此可以在同一JVM中重用它,而不是创建新的。我的问题是为什么不让文本也保持静态? 我做到了,并且工作得很好,但在任何例子中都没有看到。我错过什么了吗

    private ***static*** Text word = new Text();
    private final static IntWritable intWritable = new IntWritable(1);
最初的单词计数示例

public static class Map extends MapReduceBase implements 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, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
    String line = value.toString();
    StringTokenizer tokenizer = new StringTokenizer(line);
    while (tokenizer.hasMoreTokens()) {
      word.set(tokenizer.nextToken());
      output.collect(word, one);
    }
  }

OutputCollector API,收集映射器和还原器输出的对,为了使程序正常工作,根据您的逻辑和试图解决的应用程序逻辑类型,决定变量是否必须是全局变量,对于WordCount程序,程序工作正常,因为mapper对象没有在多个线程之间共享其状态

谢谢您的回答。我还是不明白。你能给我一个使用static失败的用例吗。我在eclipse中本地运行了这个程序,所以我相信该程序正在多个线程之间共享状态。请尝试在驱动程序中声明一个静态变量,并在mapper中访问它们。这样,您就可以知道它没有在多个线程之间共享状态