1

我有一个格式如下的文件:

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

在减少过程结束时,我想要第二个字段的不同计数,第一个字段是关键。例如

1,2
2,3
3,3

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

肿瘤坏死因子。

4

3 回答 3

0

如果我正确理解您的目标,您将需要:

  1. 使每个键的值唯一
  2. 计算每个“键”的不同项目数

因此,到达那里的最简单方法是这样的:

假设输入是 {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
于 2013-01-30T08:38:13.393 回答
-1

据我了解,您需要计算键的唯一值而不是保留值。我们可以通过从记录中创建密钥来简单,其余的 hadoop 框架将为您处理唯一记录的排序。

    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 也可以用作组合器。

于 2013-01-31T14:12:45.530 回答
-2

只需进行排序。获取数组列表中的所有输入并进行排序。

这会帮助你

大批

于 2013-01-29T12:35:51.510 回答