Java hadoop字段的不同计数
我有一个文件,其格式如下: 15321234567 1,5324564321 1,5324564321 2,1234567643 2,1234567666 2,9875422345 3,5344435345 3,5344435345 3,5344435345 3,5344435345 3,5345345312 38767564564 在reduce过程结束时,我需要第二个字段的不同计数,其中第一个字段是键。e、 g 1,2 2,3 3,3 Java中最简单的map和reduce函数是什么Java hadoop字段的不同计数,java,hadoop,Java,Hadoop,我有一个文件,其格式如下: 15321234567 1,5324564321 1,5324564321 2,1234567643 2,1234567666 2,9875422345 3,5344435345 3,5344435345 3,5344435345 3,5344435345 3,5345345312 38767564564 在reduce过程结束时,我需要第二个字段的不同计数,其中第一个字段是键。e、 g 1,2 2,3 3,3 Java中最简单的map和reduce函数是什么 Tnx
Tnx.只需进行排序即可。获取arraylist中的所有输入并进行排序 这对你有帮助
如果我正确理解您的目标,您需要: 使每个键的值唯一 计算每个键的不同项目数 所以最简单的方法就是这样: 假设输入是{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
据我所知,您需要一个键的唯一值计数,而不是保留值。 通过从记录中创建密钥,rest 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也可以用作合并器。解析行并将每行添加到映射中。例如,在第三行之后,您将有[1,{5321234567,5324564321}],reduce步骤只返回每个键的设置大小。ArrayList不会扩展到Hadoop中。这会将所有值放入内存中。非常糟糕的主意,是的。。。我只是举了一个使用Set的例子。正如我提到的…在我的解释中它并不完美。。。。。