java - MapReduce 计数问题

标签 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

目前我能够使我的 map 正常工作(拆分 2 个顶点并将 <Key, Value> 发出为 <Vertex, Edge>(例如:<A, (A,B)>),但是 reduce 有一个我无法理解的问题。当我在 for 循环之外执行 context.write(key, result); 时,显示的结果始终为 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);
    } 
}

结果:

A   d(A)=1
A   d(A)=2
A   d(A)=3
B   d(B)=1
B   d(B)=2
C   d(C)=1
D   d(D)=1
D   d(D)=2

减少 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);
}

结果 v2:

A   d(A)=1
B   d(B)=1
C   d(C)=1
D   d(D)=1

你能告诉我代码有什么问题或/以及为什么会这样吗?

最佳答案

Reducer 的两个代码版本都存在问题。您可以使用 v2,但进行更改将此 result.set("d("+ key +")="+ 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 HERE NOW
    context.write(key, result);
}

关于java - MapReduce 计数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42265896/

相关文章:

java - BigQuery 作业状态始终为 "PENDING"

java - 如何获取列表中的所有项目

apache-spark - 在用压缩文件替换 HDFS 中的小文件时如何避免破坏事件的 Hive/Presto 查询?

java - 容器启动 exitCode=1 hadoop 出现异常

java - 如何为每个 Mongo 文档分配一个用户(字符串值)?

java - 在 Android 中解析一些 HTML 代码的最佳方法

hadoop - Hadoop Map函数 "key"参数未使用

java - HDFS 目录中的文件数

hadoop - map reduce 输出文件 : part-r-* and part-*

javascript - 在 javascript/node.js 中重现 MongoDB 的映射/发出功能(不使用 MongoDB)