hadoop一个字段的明显计数

时间:2013-01-29 12:25:46

标签: java hadoop

我的文件格式如下:

1,5321234567
1,5324564321
1,5324564321
2,1234567643
2,1234567666
2,9875422345
3,5344435345
3,5344435345
3,5344435345
3,5344435345
3,5345345312
3,8767564564

在缩小过程结束时,我想要第二个字段的不同计数,第一个字段是关键字。 e.g。

1,2
2,3
3,3-

为此目的,Java中最简单的map和reduce函数是什么?

TNX。

3 个答案:

答案 0 :(得分:0)

如果我理解你的目标,你需要:

  1. 使每个键的值唯一
  2. 计算每个“键”的不同项目数
  3. 所以最简单的方法就是这样:

    假设输入为{A,B}

    MAP 1:
       Output Key  : {A,B}
       Output Value: 1
    REDUCE 1:
       Input Key   : {A,B}
       Input Values: {1,1,1,...}
       Output Key  : A
       Output Value: B
    
    MAP 2:
       Output Key  : A
       Output Value: 1
    REDUCE 2:
       Input Key   : A
       Input Values: {1,1,1,...}
       Output Key  : A
       Output Value: SUM of all the values
    

答案 1 :(得分:-1)

据我所知,您需要计算密钥的唯一值,而不是保留值。 我们可以通过从记录创建密钥来简单,休息hadoop framwork将负责为您排序唯一的记录。

    map (IntWritable key, Text value, Context context) {

       context.write(value, new IntWritable(1)); 
    }

    reduce (Text key, Iterable<IntWritable> values, Context context) {

         long count = 0;
         for (Iterator<IntWritable> iterator = values.iterator(); iterator.hasNext();) {
              count+= iterator.next().get();
         }

         context.write(key, new LongWritable(count));
      }

Reducer也可以用作组合器。

答案 2 :(得分:-2)

只做排序。获取arraylist中的所有输入并进行排序。

这会对你有所帮助

Array