gpt4 book ai didi

java - 如何在映射器中合并值?

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

我是Hadoop MapReduce的新手,最近在如何在映射器中对输出值进行装箱时遇到了一个问题。我的映射器创建了一个Text,IntWritable输出,其中数据集ID为键,元数据描述的长度为值。我的目标是将元数据长度的频率分成3组:1-200个字符,201-400个字符和401+个字符。输出文件如下所示(第一列是键,第二列是值-元数据的长度):

1   256
2 344
3 234
4 160
5 432
6 121
7 551
8 239
9 283
10 80
...

基于以上值,合并结果应显示:
1-200     3
201-400 5
401-... 2

关于如何处理它的任何想法?我应该作为Mapper清理,合并器还是在Reducer中进行?代码示例或对其他在线资源的引用将不胜感激。谢谢。

最佳答案

众所周知,数据需要合并到三个容器中。这些bin可以在Mapper中静态声明,例如:

Text BIN1 = new Text("1-200");     // bin-1
Text BIN2 = new Text("200-400"); // bin-2
Text BIN3 = new Text("400-..."); // bin-3

现在在 map 中创建一个 HashMap<Text, Integer> map。当映射器读取数据时,它将更新 bin中相应 map的计数。然后在 map方法中编写此 cleanup()。映射器的输出是 TextIntWritable(这是 map中每个bin的计数)。

如果作业中有多个Mappers,则可以将 Mapper输出汇总到 Reducer中,并使用每个键的 Iterable<IntWritable>值的简单总和( Text)。

关于java - 如何在映射器中合并值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33521225/

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