我查了一张Map之后
键,值
1,白天,夜晚,白天
2,一天,一天
这些值将传递给减速器。我的减速机
import org.apache.hadoop.mapred.Reducer;
public class RTransactionPerPartOfDay implements Reducer<Text, Text, Text, IntWritable>{
public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, IntWritable> outputCollector, Reporter reporter) throws IOException {
IntWritable intWritable = new IntWritable();
int transactionPerPartOfDayCount = 0;
while(values.hasNext()){
transactionPerPartOfDayCount += 1;
values.next();
}
intWritable.set(transactionPerPartOfDayCount);
outputCollector.collect(key, intWritable);
}
提供以下输出
1,3
2,2
也就是说,我们遇到了13次键1和2次键2。我需要做什么使reducer计数键根据遇到值的次数分开?
这样地
1,1
1,2
2,2
2条答案
按热度按时间5vf7fwbs1#
reducer中的键值为1和2,当key为1时,值为{1,2},当key为2时,值为{2},请尝试以下操作:
u91tlkcl2#
解决方案#1
在Map输出中,使值成为键的一部分:
然后在reduce:
解决方案#2
如果符合内存限制,则使用hashmap进行reduce计数。