如何在Map器中存储值?

b1zrtrql  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(285)

我是hadoopmapreduce的新手,最近遇到了一个问题:如何在Map器中对输出值进行装箱。我的Map器创建了一个文本的、可写的输出,数据集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

有什么办法吗?我应该做它作为Map清理,组合器还是在一个缩小?代码示例或参考其他在线资源将不胜感激。谢谢您。

zy1mlcev

zy1mlcev1#

众所周知,数据需要分为三个存储箱。这些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

现在创建一个 HashMap<Text, Integer> map 在Map上。当Map程序读取数据时,它将更新相应数据的计数 binmap . 那就写这个 mapcleanup() 方法。Map器的输出是 Text 以及 IntWritable (从 map ).
如果作业中有多个Map器,则 Mapper 输出可以在 Reducer ,简单求和 Iterable<IntWritable> 每个键的值( Text ).

相关问题