2013-03-21 3 views
3

일부 'n'키를 처리 한 후에 reduce 기능을 중단하려는 reduce 기능이 있습니다. 나는 각 키의 증가분에 카운터를 설정하고, 조건부에서 reduce 함수의 반환을 만족시킨다.Stop 하둡에서 기능 감소시키기

는 여기에 내가이를 다른 방법이 있나요 코드

public class wordcount { 

public static class Map extends Mapper<LongWritable, Text, IntWritable, IntWritable> { 
     private final static IntWritable one = new IntWritable(1); 
    private Text word = new Text(); 
     private IntWritable leng=new IntWritable(); 

public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { 
     String line = value.toString(); 

     StringTokenizer tokenizer = new StringTokenizer(line); 
     while (tokenizer.hasMoreTokens()) { 
       String lword=tokenizer.nextToken(); 
      leng.set(lword.length()); 
      context.write(leng, one); 
      } 
     } 
    } 

public static class Reduce extends Reducer<IntWritable, IntWritable, IntWritable, IntWritable> { 

    int count=0; 
     public void reduce(IntWritable key, Iterable<IntWritable> values, Context context) 
     throws IOException, InterruptedException { 
     int sum = 0; 
      for (IntWritable val : values) { 
       sum += val.get(); 
     count++; 
     } 
     context.write(key, new IntWritable(sum)); 
     if(count>19) return; 
      } 

    } 

입니다.

+0

곰이 작업을 수행 할 수 있습니다. 예를 들어, 10 개의 키 이후에 멈추고 싶지만 2 개의 감속기가 있다면 총 20 개의 키를 처리해야합니다. 작업을 시작할 때 어디에서든지이 제한을 외부에서 제어해야합니다. – Quetzalcoatl

+0

필요한 최상위 n 키 조건을 달성하기 위해 단일 감속기를 사용하고 있습니다. 메모 주셔서 감사. – Skandy

답변

9

당신은 하나 이상의 감속기가있는 경우, 당신은 처리 키를 내부적으로 제한 처리 할 수 ​​있음을 염두에 감속기 클래스 (새 API)의 run()를 재정 의하여

public static class Reduce extends Reducer<IntWritable, IntWritable, IntWritable, IntWritable> { 

    //reduce method here 

    // Override the run() 
    @override 
    public void run(Context context) throws IOException, InterruptedException { 
    setup(context); 
    int count = 0; 
    while (context.nextKey()) { 
     if (count++ < n) { 
     reduce(context.getCurrentKey(), context.getValues(), context); 
     } else { 
      // exit or do whatever you want 
     } 
    } 
    cleanup(context); 
    } 
} 
+0

감사합니다. 잘 했어! – Skandy

관련 문제