Java hadoop reducer局部变量始终初始化
我在Reducer类中有一个类变量:Java hadoop reducer局部变量始终初始化,java,variables,hadoop,local,Java,Variables,Hadoop,Local,我在Reducer类中有一个类变量: public static class ReduceClass extends Reducer<Text, IntWritable, Text, IntWritable> { int N = 0; @Override public void reduce(Text key, Iterable<IntWritable> values, Context
public static class ReduceClass extends
Reducer<Text, IntWritable, Text, IntWritable> {
int N = 0;
@Override
public void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {
int sum = 0;
for (IntWritable value : values) {
sum += value.get();
}
if (key.equals(something))
{
N += sum;
}
else
{
if(N > 0) context.write(key, new IntWritable(N));
else //write something else
}
}
}
公共静态类ReduceClass扩展
减速器{
int N=0;
@凌驾
公共void reduce(文本键、Iterable值、上下文)
抛出IOException、InterruptedException{
整数和=0;
for(可写入值:值){
sum+=value.get();
}
如果(键等于(某物))
{
N+=总和;
}
其他的
{
如果(N>0)context.write(key,new intwriteable(N));
else//写点别的
}
}
}
然而,即使“key.equals(something)”满足(它至少满足一次),在reduce函数调用之间,N始终为0
有趣的是,如果我在函数的开头加上'N++',N的值在reduce调用之间确实会增加,但是'N+=sum'根本不起作用!就像它永远不会执行一样
我做错了什么?我只需要N在reduce调用之间保持它的值。当然是每个减速机
蒂亚 能否在if语句之外增加
N
?我知道你说它至少发生过一次,但这与你看到的结果相矛盾。Reduce任务通常在尝试的整个生命周期内保持状态。您确定“something”类型为Text,其内容与key相同吗?你们能在if循环中包含一个print语句并检查你们是否正在进入循环吗?你们是对的,它没有进入if块。。。修正了这个错误,现在它工作了!