2016-10-30 108 views
1

我正在寫2 Mapper類和Reducer的MapReduce代碼,但我不知道爲什麼我有一個減少輸出記錄= 0。 請告訴我如何解決這個問題hadoop:減少輸出記錄= 0

package reducesidejoin; 

import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapreduce.Reducer; 

import java.io.IOException; 
import java.util.Iterator; 

    public class ReduceSideJoinReducer extends Reducer<IntWritable, 
      Text, IntWritable, Text> { 
     @Override 
     public void reduce(IntWritable key, Iterable<Text> values, 
          Context context) throws IOException, InterruptedException { 
      String output = null; 
      Text achat; 
      Text vins; 
      Text valeur2; 
      Text valeur1; 
      Iterator<Text> itr = values.iterator(); 
      valeur1 = itr.next(); 
      if (valeur1.charAt(0) == 1) { 
       vins = valeur1; 
       while (itr.hasNext()) { 
        valeur2 = itr.next(); 
        if (valeur2.charAt(0) == 2) { 
         achat = valeur2; 
         output = vins.toString() + achat.toString(); 
         context.write(key, new Text(output)); 
        } 
        context.write(key, new Text(output)); 
       } 
      } else if (valeur1.charAt(0) == 2) { 
       achat = valeur1; 
       while (itr.hasNext()) { 
        valeur2 = itr.next(); 
        if (valeur2.charAt(0) == 1) { 
         vins = valeur2; 
         output = vins.toString() + achat.toString(); 
         System.out.println(key + "," + output); 
        } 
        context.write(key, new Text(output)); 
       } 
      } 
     } 
    } 
+0

請寫出乾淨的代碼,因此開發人員可以幫助你更快更好的 –

+0

你怎麼寫'Reducer'?你可以在這裏添加Mappers的代碼嗎? – mrsrinivas

回答

1

唯一的辦法你減速可以輸出任何東西是,如果你的字符的比較工作。這是假設你實際上有記錄進入你的減速器。

我想看看這些行:valeur1.charAt(0) == 1

你是一個整數比較爲char,我懷疑你想找的1(49,如果你做了一個整數比較)的打印值,所以你可能想:

valeur1.charAt(0) == '1'

你也這樣做了很多 - vins = valeur1;這是會導致問題,因爲Hadoop是要被重用Text對象它可以讓你通過Iterable

你應該改變這些以vins.set(valeur1);