mapreduce中怎么实现二次排序
发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,mapreduce中怎么实现二次排序,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。二次排序的原理是将key自定义为一个其他的Bean
千家信息网最后更新 2024年11月20日mapreduce中怎么实现二次排序
mapreduce中怎么实现二次排序,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
二次排序的原理是将key自定义为一个其他的Bean对象,该对象中存储两个变量,一个为正常需要排序的key,第二个为需要作为二次排序的key,并为这个对象提供比较方法
/** * @ClassName IntPair * @Description * 定义IntPair对象,该对象实现WritableComparable接口,描述第一列和第二列数据,同时完成两列数据的相关操作 * ,这里是对二者进行比较 * @date 2014年11月10日 上午10:15:34 * */ public static class IntPair implements WritableComparable{ String first; int second; /** * Set the left and right values. */ public void set(String left, int right) { first = left; second = right; } public String getFirst() { return first; } public int getSecond() { return second; } public int getFileName() { return fileName; } public void setFileName(int fileName) { this.fileName = fileName; } @Override // 反序列化,从流中的二进制转换成IntPair public void readFields(DataInput in) throws IOException { first = in.readUTF(); second = in.readInt(); fileName = in.readInt(); } @Override // 序列化,将IntPair转化成使用流传送的二进制 public void write(DataOutput out) throws IOException { out.writeUTF(first); out.writeInt(second); out.writeInt(fileName); } @Override // key的比较 public int compareTo(IntPair o) { if (!first.equals(o.first)) { return o.first.compareTo(first); } else if (second != o.second) { return second > o.second ? 1 : -1; } else { return 0; } } @Override public boolean equals(Object right) { if (right == null) return false; if (this == right) return true; if (right instanceof IntPair) { IntPair r = (IntPair) right; return r.first.equals(first) && r.second == second; } else { return false; } } }
为了能让第一次排序的正常排序需要使用Partitioner和
/** * 分区函数类。根据first确定Partition。 */ public static class FirstPartitioner extends Partitioner{ @Override public int getPartition(IntPair key, Text value, int numPartitions) { return key.first.hashCode()%numPartitions; } }
/** * 分组函数类。只要first相同就属于同一个组。 */ // 第二种方法,继承WritableComparator public static class GroupingComparator extends WritableComparator { protected GroupingComparator() { super(IntPair.class, true); } @SuppressWarnings("rawtypes") @Override // Compare two WritableComparables. public int compare(WritableComparable w1, WritableComparable w2) { IntPair ip1 = (IntPair) w1; IntPair ip2 = (IntPair) w2; String l = ip1.getFirst(); String r = ip2.getFirst(); return r.compareTo(l); } }
然后在main函数中的job中加入
job.setMapOutputKeyClass(IntPair.class);job.setGroupingComparatorClass(GroupingComparator.class);job.setPartitionerClass(FirstPartitioner.class);
关于mapreduce中怎么实现二次排序问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
排序
对象
函数
方法
问题
二进制
序列
数据
更多
帮助
解答
易行
相同
简单易行
两个
内容
原理
变量
同时
小伙
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
杂志信息网络安全
神魔大陆2服务器
软件开发工资需要结转吗
如何连外网服务器
浙江15项互联网领先科技成果
战地1创建服务器免费吗
土地数据库更新方案
视频服务器发展史价格表
联盟更新后一直连接服务器
新沂网络营销软件开发常见问题
初中毕业想学软件开发
河北网络技术转让报价
原神服务器如何改成b服
汽车网络技术分类
数据循环输入数据库
学软件开发有什么方向
女性网络安全知识动漫
危害网络安全的6大因素
无锡智能软件开发销售公司
巨野金帆网络技术服务有限公司
元心系统软件开发
杜绝网络安全的发生
linux删除第一行数据库
软件开发运维工程师
数据库是否属于汇编
浪潮服务器status灯亮
高校网络安全在线培训
服务器架设与管理实训报告
数据库语句插入数据
足球数据库扫盘软件