0

Hadoop 0.21.0 を使用しています。2 つの異なるファイルに出力したいので、MultipleOutputs を機能させようとしています。これが私の Reduce です:

public static class Reduce extends MapReduceBase implements Reducer < Text, Text > {
  private MultipleOutputs mos;
  public void configure(JobConf conf) {
    mos = new MultipleOutputs(conf);
  }
  public void reduce(Text key, Iterator < Text > values, OutputCollector < Text, Text > output, Reporter reporter) throws IOException {
    mos.getCollector("A", reporter).collect(key, new Text("Hello"));
    mos.getCollector("B", reporter).collect(key, new Text("Bye"));
    mos.getCollector("C", reporter).collect(key, new Text("Chau"));
  }
  public void close() throws IOException {
    mos.close();
  }
}

しかし、これをコンパイルしようとすると、次のエラーが発生します。

Main.java:41: error: cannot find symbol
        private MultipleOutputs mos;
                ^
  symbol:   class MultipleOutputs
  location: class Reduce

Main.java:45: error: cannot find symbol
            mos = new MultipleOutputs(conf);
                      ^
  symbol:   class MultipleOutputs
  location: class Reduce

私はこれを追加しましたが:import org.apache.hadoop.mapred.*; コードの先頭に。

これらのエラーが発生する理由を教えてください。どうすればこの問題を解決できますか?

4

1 に答える 1

0

Cannot find symbolエラーは、クラス ライブラリをインポートしたことがわかっているときに、コンパイル時にコンパイラを混乱させるクラスパスに複数のクラスがあることに関連する傾向があります。

同様の問題を経験した他の人は次のとおりです。 シンボルが見つかりません

于 2013-04-08T13:32:56.150 に答える