hadoop如何自定义GroupComparator实现求最大值
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下hadoop如何自定义GroupComparator实现求最大值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一
千家信息网最后更新 2026年11月03日hadoop如何自定义GroupComparator实现求最大值
小编给大家分享一下hadoop如何自定义GroupComparator实现求最大值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
import java.io.DataInput;import java.io.DataOutput;import java.io.IOException;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.io.WritableComparable;import org.apache.hadoop.io.WritableComparator;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;/* * 如下蚀测试数据,第一个字段为订单号,第二个字段为id 第三个字段为价格,数据以tab键分开 * 要求求出订单号相同的价格最大的条记录O00001 123 1234O00002 124 3435O00003 125 132.78O00004 126 334O00004 127 8976O00003 128 635O00002 129 23O00001 130 980O00001 131 111O00002 132 66O00003 133 42O00004 134 88O00005 135 900结果如下:O00001 123 1234.0O00002 124 3435.0O00003 128 635.0O00004 127 8976.0O00005 135 900.0**/public class GroupComparatorMian { static final Log LOG = LogFactory.getLog(GroupComparatorMian.class); public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException { Configuration conf = new Configuration(); Job job = Job.getInstance(conf); job.setJarByClass(GroupComparatorMian.class); job.setMapperClass(GroupComparatorMapper.class); job.setReducerClass(GroupComparatorReducer.class); job.setOutputKeyClass(OrderBean.class); job.setOutputValueClass(NullWritable.class); job.setGroupingComparatorClass(CustGroupComparator.class); String jobName = "'Customize groupcomparator test'"; job.setJobName(jobName); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); boolean bb = job.waitForCompletion(true); if(bb) { LOG.info("Job "+ jobName +" is done."); }else { LOG.info("Job "+ jobName +"is going wrong,now exit."); System.exit(0); } }}class CustGroupComparator extends WritableComparator{ public CustGroupComparator() { super(OrderBean.class,true); } @Override public int compare(WritableComparable a, WritableComparable b) { OrderBean oa = (OrderBean)a; OrderBean ob = (OrderBean)b; return oa.getOrder_id().compareTo(ob.getOrder_id()); } }class OrderBean implements WritableComparable{ private String order_id; private String id ; private double prise; public OrderBean() { } public OrderBean(String order_id,String id,double prise) { this.order_id = order_id ; this.id = id; this.prise = prise; } public String getOrder_id() { return order_id; } public void setOrder_id(String order_id) { this.order_id = order_id; } public String getId() { return id; } public void setId(String id) { this.id = id; } public double getPrise() { return prise; } public void setPrise(double prise) { this.prise = prise; } @Override public void write(DataOutput out) throws IOException { out.writeUTF(order_id); out.writeUTF(id); out.writeDouble(prise); } @Override public void readFields(DataInput in) throws IOException { this.order_id = in.readUTF(); this.id = in.readUTF(); this.prise = in.readDouble(); } @Override public int compareTo(OrderBean o) { int cnt = this.order_id.compareTo(o.getOrder_id()); if(cnt==0) { cnt = (int) (-(this.prise- o.getPrise())); } return cnt; } @Override public String toString() { return order_id + "\t" + id + "\t" + prise ; } }class GroupComparatorMapper extends Mapper{ NullWritable nul = NullWritable.get(); OrderBean ob = new OrderBean(); @Override protected void map(LongWritable key, Text value, Mapper.Context context) throws IOException, InterruptedException { String[] split = value.toString().split("\t"); ob.setOrder_id(split[0]); ob.setId(split[1]); ob.setPrise(Double.parseDouble(split[2])); context.write(ob, nul); }}class GroupComparatorReducer extends Reducer{ NullWritable nul = NullWritable.get(); @Override protected void reduce(OrderBean bean, Iterable iter, Reducer.Context context) throws IOException, InterruptedException { context.write(bean, nul); } } 以上是"hadoop如何自定义GroupComparator实现求最大值"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
最大
字段
篇文章
最大值
价格
内容
数据
订单
订单号
相同
三个
不怎么
大部分
更多
知识
结果
行业
资讯
资讯频道
频道
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
百单网互联网科技有限公司怎么样
互联网科技保险
金融科技还是互联网
互联网科技媒体
亿策互联网科技
友谊互联网络科技
天下捷融互联网科技
苏州大垚互联网科技
互联网科技视频素材
互联网科技类展会
互联网科技股午盘股票涨跌
小米互联网科技园设置
科技与互联网哪个更好
茂名市互联网科技产业园
想开互联网科技公司怎么样
山东有哪些互联网科技公司
科技互联网的核心竞争力
浙南科技城互联网大厦招聘
半导体行业属于互联网高科技类吗
广州三三互联网科技有限公司
互联网科技公司简介
互联网科技工作委员会
鸠鸠互联网科技
智能科技公司是互联网公司吗
合肥互联网科技公司
互联网科技ppt模板
重庆科技学院互联网
华服互联网科技官网
中国互联网有什么科技
河南商务圈互联网科技有限公司