MapReduce自定义分组实现
来源:互联网 发布:木工材料计算软件 编辑:程序博客网 时间:2024/05/20 22:31
当mapreduce没有自定义分组时,map中所有的key被分为一组,其分组操作默认是走的HashPartitioner:
public class HashPartitioner<K, V> extends Partitioner<K, V> { /** Use {@link Object#hashCode()} to partition. */ public int getPartition(K key, V value, int numReduceTasks) { return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks; }}默认numReduceTasks为1,上述程序对于任何key(map输出的key)都是返回0,因此所有的key被分到一个组。但是在某些业务场景中,我们可能需要对key进行分组。分组的实现包括两步:
1.编写partition组件
如HashPartitioner,自定义的分组类应当继承抽象类Partitioner,并实现其抽象方法getPartition。例如,对手机号进行分组(map中key的值封装的是手机号):
import java.util.HashMap;import org.apache.hadoop.mapreduce.Partitioner;/** * 怎么使得这个partition组件生效 * @author ASUS * * @param <KEY> * @param <VALUE> */public class AreaPartitioner<KEY, VALUE> extends Partitioner<KEY, VALUE>{private static HashMap<String,Integer> areaMap=new HashMap<String,Integer>();static{areaMap.put("135", 0);areaMap.put("136", 1);areaMap.put("137", 2);areaMap.put("138", 3);areaMap.put("139", 4);}public int getPartition(KEY key, VALUE value, int numPartitions) {// 从key中拿到手机号,查询手机号归属地词典,不同省份返回不同的归属地号int areaCode=areaMap.get(key.toString().substring(0, 3))==null?5:areaMap.get(key.toString().substring(0, 3));return areaCode;}}分组后mapreduce的处理结果就会根据不同的分组给出,一个分组一个结果文件。
2.注册自定义的partition组件
在启动hadoop的main方法中进行注册:
//设置自定义分组逻辑job.setPartitionerClass(AreaPartitioner.class);//设置reducer数量 应当和AreaPartitioner设置的分组数目一致,,或者多于。少于的时候会报错job.setNumReduceTasks(5);
这里需要注意的是numReduceTasks数目应当和分组数目一致。
0 0
- MapReduce自定义分组实现
- mapreduce,自定义分区,分组,排序实现join
- MapReduce自定义分组Group
- mapreduce自定义分组
- hadoop-2.7.1 MapReduce自定义分组的实现
- MapReduce实现分组排序
- Hadoop mapreduce自定义分组RawComparator
- 使用 MapReduce 实现分组排名
- MapReduce的自定义排序、分区和分组
- mapreduce,自定义排序,分区,分组实现按照年份升序排序,温度降序排序
- Union 实现自定义分组
- mapreduce学习笔记-二次排序(自定义数据类型,自定义分区分组)
- mapReduce分组
- Mapreduce中的 自定义类型、分组与二次排序
- MapReduce实现自定义二次排序
- 分组Top N问题(二) - Hadoop MapReduce实现
- 快逸V5实现自定义分组报表
- Hadoop笔记之自定义分组实现
- 是否在三角形内
- 轻松掌握java读写锁(ReentrantReadWriteLock)的实现原理
- MXNet安装教程
- 2016 CVTE 笔试编程题
- 笔试题之数据库准备
- MapReduce自定义分组实现
- cocos 2dx 3.12 学习笔记(五) BallTest
- 欢迎使用CSDN-markdown编辑器
- 第二周项目2 -程序的多文件组织
- hadoop2.6下安装hive
- 试题名称:出现次数最多的数 已ac
- Navicat Error 2003 - can't connect to mysql server 'localhost' (10061)
- java集合框架总结
- 微信模板消息