Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/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 MapReduce计数问题_Java_Hadoop_Mapreduce_Reduce - Fatal编程技术网

Java MapReduce计数问题

Java MapReduce计数问题,java,hadoop,mapreduce,reduce,Java,Hadoop,Mapreduce,Reduce,我是hadoop新手,我尝试制作一个程序,该程序将使用一个输入文件来描述一个带边的图形,例如:a,B,a,C,B,D,a,D我想计算每个顶点的度数并如下所示: (A,B) d(A)=3 (A,C) d(A)=3 (A,D) d(A)=3 (A,B) d(B)=2 (B,D) d(B)=2 (A,C) d(C)=1 (A,D) d(D)=2 (B,D) d(D)=2 目前,我能够使我的贴图很好地分割2个顶点并发射as-ex:但是reduce有一个我无法理解的问题。当我执行cont

我是hadoop新手,我尝试制作一个程序,该程序将使用一个输入文件来描述一个带边的图形,例如:a,B,a,C,B,D,a,D我想计算每个顶点的度数并如下所示:

 (A,B) d(A)=3
 (A,C) d(A)=3
 (A,D) d(A)=3
 (A,B) d(B)=2
 (B,D) d(B)=2
 (A,C) d(C)=1
 (A,D) d(D)=2
 (B,D) d(D)=2
目前,我能够使我的贴图很好地分割2个顶点并发射as-ex:但是reduce有一个我无法理解的问题。当我执行context.writekey时,结果;在for循环之外,显示的结果始终为1。我试图调试,但变量sum的值是正确的

减少:

public void reduce(Text key, Iterable<Text> values, 
                  Context context
                  ) throws IOException, InterruptedException {
    int sum = 0;
    for (Text val : values) {
         sum+=1;
         result.set("d("+ key +")=" + sum);
         // WRITE INSIDE THE LOOP
         context.write(key, result);
    } 
}
减少v2:

public void reduce(Text key, Iterable<Text> values, 
                  Context context
                  ) throws IOException, InterruptedException {
    int sum = 0;
    for (Text val : values) {
         sum+=1;
         result.set("d("+ key +")=" + sum);
    } 
    // WRITE HERE NOW
    context.write(key, result);
}

您能告诉我代码有什么问题吗?或者/或者为什么它会这样做?

Reducer的两个代码版本都有问题。您可以使用v2,但需要更改才能获得此结果;跳出循环

使用此代码:

public void reduce(Text key, Iterable<Text> values, 
                  Context context
                  ) throws IOException, InterruptedException {
    int sum = 0;
    for (Text val : values) {
         sum+=1;
    } 
    result.set("d("+ key +")=" + sum);
    // WRITE HERE NOW
    context.write(key, result);
}

结果写在上下文中,显然是一个文本,而不是SetI已经尝试过的,同样的问题。。。为什么变量总和重置为1?在哪里以及如何声明结果?您的代码是正确的。确保运行最新版本的runnable jar。您可能正在运行以前版本的代码。编译并再次生成jar以确保。@vefthym公共静态类IntSumReducer扩展了Reducer{private Text result=new Text;这只是Reducer的一个文本属性,我正在使用eclipse,因此每次我执行代码时它都会生成一个新的jar。+我在控制台版本中尝试过,我认为eclipse中有一个bug,并使用了正确的命令来创建jar并使用它,但结果相同。。。
A   d(A)=1
B   d(B)=1
C   d(C)=1
D   d(D)=1
public void reduce(Text key, Iterable<Text> values, 
                  Context context
                  ) throws IOException, InterruptedException {
    int sum = 0;
    for (Text val : values) {
         sum+=1;
    } 
    result.set("d("+ key +")=" + sum);
    // WRITE HERE NOW
    context.write(key, result);
}