gpt4 book ai didi

java - 如何确定 reducer 的值(value)?

转载 作者:行者123 更新时间:2023-12-02 21:11:56 25 4
gpt4 key购买 nike

运行 map 后,我得到

核心值(value)
1,日,夜,日
2,天,天

该值传递到 reducer 。
我的 reducer

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

这意味着,我们遇到键1 3次和键2 2次。我需要根据遇到值的次数使 reducer 计数键分开吗?

像这样

1,1
1,2
2,2

最佳答案

解决方案1

在 map 输出中,将值作为键的一部分:

1 day, null
1 night, null
1 day, null
2 day, null
2 day, null

然后将其拆分为reduce:
public class RTransactionPerPartOfDay implements Reducer<Text, NulLWritable, Text, IntWritable>{
public void reduce(Text key, Iterator<NullWritable> values, OutputCollector<Text, IntWritable> outputCollector, Reporter reporter) throws IOException {
String[] keyParts = key.toString().split(" ");
int count = 0;
for (NullWritable aValue : values) count++;
outputCollector.collect(new Text(keyParts[0]), new IntWritable(count));
}

解决方案#2

如果哈希表适合内存限制,则使用哈希表进行计数。

关于java - 如何确定 reducer 的值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40021387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com