我正在使用2个映射器类和一个reducer编写MapReduce代码,但是我不知道为什么我有一个reduce输出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));
}
}
}
}发布于 2016-10-31 17:54:57
你的缩减程序输出任何东西的唯一方法是你的字符比较是有效的。这是假设您实际上有记录进入您的缩减程序。
我会看看下面这几行:valeur1.charAt(0) == 1
您正在比较一个整数和一个字符,我怀疑您正在寻找1的可打印值(如果您进行了整数比较,则为49),因此您可能希望:
valeur1.charAt(0) == '1'
你也做了很多这样的事情- vins = valeur1;,这会导致问题,因为hadoop将重用它通过Iterable提供给你的Text对象。
您应该将它们更改为vins.set(valeur1);
https://stackoverflow.com/questions/40334753
复制相似问题