mapreduce中怎么实现二次排序
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,mapreduce中怎么实现二次排序,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。二次排序的原理是将key自定义为一个其他的Bean
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
山东数据软件开发设施服务标准
常熟诚信软件开发服务电话
重庆市计算机软件开发合同模板
网络技术的基本概念是什么
力学软件开发
钢材行业软件开发
他软件开发项目风险列表
lol全球服务器突然暂停赛
计算机网络技术基础论述
服务器引导文件怎么打开
啥情况用视频管理服务器
网络安全一键应急
吧运筹学加入数据库
软件开发与编写程序一样吗
废旧ktv服务器回收
南昌市app软件开发公司
计算机安卓软件开发专业
平板电脑安装软件开发
软件定义网络技术题
hp服务器点亮硬盘
微信小程序免费服务器支持多少人
关闭代理服务器
软件开发的小分支
湖北网络安全宣传中心
完善道路管网数据库建设的意义
公共数据库有多少种病原微生物
齐鲁工业大学网络安全分数线
《科技中国》数据库
网络技术名词lig
tbc转服务器可以带多少物品