Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hadoop reducer局部变量始终初始化_Java_Variables_Hadoop_Local - Fatal编程技术网

Java hadoop 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

我在Reducer类中有一个类变量:

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块。。。修正了这个错误,现在它工作了!