hadoop:减少输出记录=0

hadoop:减少输出记录=0,hadoop,Hadoop,我正在用2个mapper类和一个reducer编写MapReduce代码,但我不知道为什么我有一个reduce output records=0。 请告诉我如何解决这个问题 package reducesidejoin; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; import java.io.IOE

我正在用2个mapper类和一个reducer编写MapReduce代码,但我不知道为什么我有一个reduce output records=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));
                }
            }
        }
    }
package reducesidejoin;
导入org.apache.hadoop.io.IntWritable;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapreduce.Reducer;
导入java.io.IOException;
导入java.util.Iterator;
公共类ReducesDejoinReducer扩展了Reducer{
@凌驾
public void reduce(可写键、可写值、,
上下文)抛出IOException、InterruptedException{
字符串输出=null;
文本achat;
文本VIN;
文本2;
文本1;
迭代器itr=values.Iterator();
valeur1=itr.next();
if(值1.字符(0)==1){
vins=valeur1;
while(itr.hasNext()){
valeur2=itr.next();
if(valeur2.字符(0)==2){
achat=valeur2;
输出=VIN.toString()+achat.toString();
编写(键,新文本(输出));
}
编写(键,新文本(输出));
}
}else if(valeur1.字符(0)==2){
achat=valeur1;
while(itr.hasNext()){
valeur2=itr.next();
if(值2.字符(0)==1){
vins=valeur2;
输出=VIN.toString()+achat.toString();
System.out.println(键+“,”+输出);
}
编写(键,新文本(输出));
}
}
}
}

减速机输出任何内容的唯一方法是字符比较是否正常。这是假设您实际上有记录输入减速机

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

您正在将整数与字符进行比较,我怀疑您正在查找
1
的可打印值(如果您进行了整数比较,则为49),因此您可能希望:

valeur1.charAt(0)='1'

您也经常这样做-
vins=valeur1
这将导致问题,因为hadoop将重用它通过
Iterable
提供给您的
Text
对象


您应该将其更改为
vins.set(valeur1)

请编写干净的代码,这样开发人员就可以帮助您更快更好地编写代码。您是如何向
Reducer
编写代码的?你能在这里添加映射器代码吗?