我正在使用WordCount示例,并且在Reduce函数中,我需要获取文件名。
public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
int sum = 0;
while (values.hasNext()) {
sum += values.next().get();
}
String filename = ((FileSplit)(.getContext()).getInputSplit()).getPath().getName();
// ----------------------------^ I need to get the context and filename!
key.set(key.toString() + " (" + filename + ")");
output.collect(key, new IntWritable(sum));
}
}
这是当前上面修改的代码,我想在其中获取要为该单词打印的文件名。我尝试了以下Java Hadoop:如何创建作为输入文件并提供输出(每个文件中的行数)的映射器?但我无法得到context
物体。
我是hadoop的新手,需要此帮助。有帮助吗?
您无法获得context
,因为它context
是“新API”的构造,并且您正在使用“旧API”。
请改用以下字数示例:http : //wiki.apache.org/hadoop/WordCount
在这种情况下,请参见reduce函数的签名:
public void reduce(Text key, Iterable<IntWritable> values, Context context)
看到!上下文!请注意,在此示例中,它是从而.mapreduce.
不是从导入的.mapred.
。
对于新的hadoop用户而言,这是一个常见问题,因此不要感到难过。通常,出于多种原因,您希望使用新的API。但是,请务必小心找到的示例。另外,请认识到新的API和旧的API不可互操作(例如,您不能拥有新的API映射器和旧的API Reducer)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句