我正在使用hadoop0.21.0。我想输出到两个不同的文件,所以我试图让多个输出工作。这是我的建议:
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.*
; 在代码的开头。
有人能告诉我为什么我会犯这些错误吗?我怎样才能解决这个问题?
1条答案
按热度按时间dzhpxtsq1#
Cannot find symbol
错误往往与类路径中有多个类有关,当您知道已导入类库时,这些类会在编译时混淆编译器。其他人也遇到了类似的问题:找不到符号