2016-10-30 136 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);