0

假设每个 Reducer 输出一个整数作为其值(或键)。有没有办法在 Hadoop 的主程序中访问这些值(或键)(例如总结它们)?

4

1 回答 1

2

你的输出格式是什么?如果您使用的是 SequenceFileOutput,那么您可以在作业完成后使用 SequenceFile.Reader 类在主程序中打开 part-r-xxxxx 文件。例如输出 的作业<Text, IntWritable>,您可以对值求和,如下所示:

FileSystem fs = FileSystem.get(getConf());
Text key = new Text();
IntWritable value = new IntWritable();
long total = 0;
for (FileStatus fileStat : fs.globStatus(new Path("/user/jsmith/output/part-r-*"))) {
  SequenceFile.Reader reader = new SequenceFile.Reader(fs, fileStat.getPath(), getConf());
  while (reader.next(key, value)) {
    total = value.get();
  }
  reader.close();
}

对于 TextOutputFormat,以下可能会执行此操作(替换 for 循环的内容):

BufferedReader reader = new BufferedReader(new InputStreamReader(fs.open(fileStat.getPath())));
String nextLine;
while ((nextLine = reader.readLine()) != null) {
  String tokens[] = nextLine.split("\t");
  total += Integer.parseInt(tokens[1]);
}
reader.close();
于 2013-01-17T00:24:00.180 回答