Java 如何在映射器中存储值?

Java 如何在映射器中存储值?,java,hadoop,mapreduce,aggregation,binning,Java,Hadoop,Mapreduce,Aggregation,Binning,我是Hadoop MapReduce的新手,最近遇到了一个问题,就是如何在映射器中对输出值进行装箱。我的映射器创建一个文本、可写的输出,数据集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 ...

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

有什么办法吗?我应该作为映射清理器、合并器还是在减速器中执行?代码示例或参考其他在线资源将不胜感激。多谢各位

众所周知,数据需要分为三个存储箱。这些bin可以在映射器中静态声明,如:

现在在映射中创建一个HashMap映射。当映射器读取数据时,它将更新映射中各个bin的计数。然后在cleanup方法中编写此映射。映射器的输出是文本和IntWritable,这是映射中每个bin的计数

如果作业中有多个映射器,则可以在Reducer中聚合映射器输出,每个关键字文本的Iterable值的简单总和

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