将Reducer的输出添加到Hadoop中的列表

时间:2016-08-24 17:35:34

标签: java hadoop mapreduce

我正在尝试将reducer的输出添加到list中,然后访问,然后在读取所有值后打印列表。

以下是我正在做的事情: -

public class Reducer extends Reducer<Text, BooleanWritable, Text, BooleanWritable> {
  public static final Logger LOG = LoggerFactory.getLogger(Reducer.class);
  public List<String> keys= new ArrayList<>(1000);

  public void reduce(Text key, Iterable<BooleanWritable> values, Context context) throws IOException, InterruptedException {
    for (BooleanWritable value : values) {
        keys.add(key.toString());
      context.write(key, value);
    }
    print(keys);
  }

  private void print(String keys) {
    for (String key : keys) {
      LOG.info(key);  
  }
}

但是,它没有按预期工作。 我想在将reducer的所有值添加到list

之后仅打印一次列表

1 个答案:

答案 0 :(得分:2)

您需要使用每个reducer任务调用一次。 protected void cleanup(org.apache.hadoop.mapreduce.Reducer.Context context) throws IOException,InterruptedException

请参阅此documentation