MapReduce实际案例、MapReduce参数、yarn集群

MapReduce实际案例

GroupingComparator求取top1

需求
求出每一个订单中成交金额最大的一笔交易
分析
1、利用“订单id和成交金额”作为key,可以将map阶段读取到的所有订单数据按照id分区,按照金额排序,发送到reduce
2、在reduce端利用groupingcomparator将订单id相同的kv聚合成组,然后取第一个即是最大值
代码实现

  • 第一步:定义OrderBean
    定义一个OrderBean,里面定义两个字段,第一个字段是我们的orderId,第二个字段是我们的金额(注意金额一定要使用Double或者DoubleWritable类型,否则没法按照金额顺序排序)
public class OrderBean implements WritableComparable<OrderBean> {
   
    private String orderId;
    private Double price;
    @Override
    public int compareTo(OrderBean o) {
   
        //比较订单id的排序顺序
        int i = this.orderId.compareTo(o.orderId);
        if(i==0){
   
          //如果订单id相同,则比较金额,金额大的排在前面
           i = - this.price.compareTo(o.price);
        }
        return i;
    }
    @Override
    public void write(DataOutput out) throws IOException {
   
            out.writeUTF(orderId);
            out.writeDouble(price);
    }
    @Override
    public void readFields(DataInput in) throws IOException {
   
        this.orderId =  in.readUTF();
        this.price = in.readDouble();
    }
    public OrderBean() {
   
    }
    public OrderBean(String orderId, Double price) {
   
        this.orderId = orderId;
        this.price = price;
    }
    public String getOrderId() {
   
        return orderId;
    }
    public void setOrderId(String orderId) {
   
        this.orderId = orderId;
    }
    public Double getPrice() {
   
        return price;
    }
    public void setPrice(Double price) {
   
        this.price = price;
    }
    @Override
    pu
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值