00:00
好,下午呢,我们开始讲这个group comp,也就是辅助排序。啊,又叫分组排序,在不同的企业当中叫法不一样啊,它有多个名字是吧?啊分组排序,辅助排序啊等等,那这个排序呢,它是在端的一个排序啊。是在什么位置呢?看一下这张图,控制图。在这个位置。分组排序,它是把这个数据送入到reduce端之前,对这个数据呢进行一次分组排序。那为什么要分组呢?哎,先不给大家说,哎,我们先看案例,先把案例分完,做完之后,然后来我们再回过头来再总结它。哈哈,上来先看例啊。呃,有这么一个需求。呃,是下面这么多订单,大家都买过东西是吧。啊,尤其双11的时候。就要动手动脚了啊。
01:01
嗯,这是订单一,订单一里面呢,有两个商品三一和三米二,商品一的价格呢是200多,三米二价格三块八。那订单二里面呢,包括了产品35。啊,每个产品的价格还不一样。这个订单里面两个商品,一个是二,一个是六。的价格也不一样。这是基本信息介绍,那下面他的需求是什么?现在需要求出每个订单中最贵的商品。是要求求出,比如说订单一里面最贵的商品,订单二里面最贵的商品,订单三里面就给他。每个订单中最贵的商品啊,这种需求是在企业中比较常见。啊,你这个订单里面啊,你买的哪个件最贵。
02:03
好,那下面呢,看这是原始输入数据。啊,跟刚才那张表里的数据是一样的啊,只不过你能感觉到他这个订单ID是不是杂乱文章了。哎,咱农庄的啊,后面呢,这是产品ID,然后后面是价格。啊,这么一组数据都是很乱啊,没有一个规律可言。那下面期望输出的结果是这样的。按照ID的顺序一、二、三、四往下排。然后价格呢,只选这个订单当中最贵的。怎么实现?那提供一下思路。可以利用订单ID和成交金额。作为。你只要涉及到这个排序的问题。
03:01
肯定要将这个对象放到P里面进行传输。啊,这是一定的,因为它系统默认的就对这个K进行排序啊。根据你的要求,上午我们写过一个排序吧,是不是重写它的继承是吧,应该实现实现read吧,Compareable接口啊,重写里面的compare。方法。那我可以将这个B对象放到P里面去。然后呢,对他的订单ID和成交金额进行。可以将外部阶段取到的所有的订单数据按照ID进行升序排序,支出升序啊。啊,然后呢,对他的金额我再降去排序。那最终的结果是什么样的呢?来,我们来看这个啊。按这个分析过程。书记。这边呢,是输出我们的预期。那应该怎么做呢?看麦开一个这个获取一行切割封装成对象,这个我相信大家没有任何问题,对吧。
04:07
下招。那切割完对象之后,这是对象的格式啊,这是对右侧呢,是对象里面对应的数据,因为第一行嘛,比如说第一行拿过来封装完之后就是001到这。我们这个228到这儿。然后下一个是另一个这么过来的。切割完之后,它就会形成这么一堆一堆的B对象。然后对他们进行排序,首先根据ID进行排序。如果ID相同,再根据价格进行。降序排序。那排完的效果什么样呢?订单一的放在这儿。然后。价格降息排序。订单二的放在这儿。价格降息排序。订单三的房产证价格进里面去。
05:00
这个不难吧。哎,首先这一步难,只要将它的B对象放到这个K里面进行传输。啊,然后呢,实现red comp接口啊,差异比较的参数是一个是ID。一个是价格。就搞定了,跟上午的这个比较是没有任何区别。那下面问题来了,那如何将它的最大值你上面倒叙嘛,是不是上面这个就是最大值啊,一定是最大值吧。啊,你先不看这个辅助排序这块啊,我就问你在这个radio端如何将。是不是订单一啊,对吧,这是K吧,哎,这是K啊将这个吧。228最大值是数据。怎么?我你们的想法是不是,哎,我只把这个这组数据进入到一个reduce方法,我只把第一个输据是不是就OK了。
06:02
有没有想过?哎,我这个是这不K吗?对不对,哎,我只把这个最大值传出去是不就了。行不行呢?我们先写呗,啊先不管三十一二十一这一块,实现到这没有任何问题吧。那我们就先实现到这儿,首先定一个并对象来干什么?是不是对这些数据进行排序啊?OK哈,好,先不管后面这些。
我来说两句