00:00
好,那接下来我们看一下这个rank啊,一看就知道他是排名的,打打排位的啊,Rank分是吧,多少分,一万多分有点扯了,然后这个排名的,但是它也必须后面跟着over对吧?啊,必须也跟着over,就单独用,用不了啊,它是用来排名的,那这个地方呢,有列了有三个,一个呢叫rank。说的是排序相同时会重复,总数不会变,然后第二个第3RANK叫排序相同时会重复,总数会减少,最后一个会根据顺序计算,就是说排序就算你相同的时候,它不会重复,这个大家应该都经历过,就是正常的在学校里边那个分数对吧?分数排名问题,如果两个人分数一样,嗯,各种情况都有啊,在学校里边可能两个总分一样的时候,就并列对,并列第一,假如说两个第一。
01:10
接下来一个人是第二还是第三,是不是都都有啊对吧,都有排序,那其实讲的就是这种第一个rank排名相同的时候,重复就是允许并列,总数不会变,就是113。这个叫总数不会变对吧,那总数会减少,他排名呢,就是112,总数是不是少了,总的三个人,最后一个名次是二,是不是总数减少啊,指的这个意思,然后呢。它不是的,就它就是123,他不会考虑你的不一样的问题了啊,就一样的问题,它就是正常是正常算的,因为这很简单,很好记啊,嗯,这三个记两个是不是就够了,因为三种情况大家都知道一二对吧,一三,还有一个是123记两个就行了,那这个呢叫number number翻译过来叫什么。
02:04
行号对不对啊?行号可能重复吗?不可能重复吧,我要对每一行数据进行排序,行号可能重复吗?不可能对吧?所以number呢,它是这种不可重复的,而de rank什么意思?对,什么压缩的密集的吧,密集的,所以密集的,你看这两个哪个是密集的,那肯定是112吧,挨着的密集的对吧?啊,所以你进两个就够了,好,那接下来呢,我们都把这个用一下啊啊那这块呢,有一堆人考了一堆成绩是吧?把这个数据呢拿过来,这四个人又来了是吧。来检查一下,还是中间都是什么table键对吧?啊这里边呢会搞的,看这个里边我记得有一个人的分数是一样的。
03:01
啊。他们俩的英语成绩一样的对吧?啊到时候呢,我们就主要看它啊,主要看它OK好他C拿过来,然后呢,我们YM一个score分数对吧,点开这啊开插入放哪里来保存退出,然后接下来呢,我们把这个表去建一下面语句。嗯,然后这个位置我再改一下,诶少了一个斜杠是吧?嗯,这个S我不要,我就直接从这粘到这一把搂过来,好先拉的新这个,这是我们的一个数据啊,这是我们的数据,好,那假如说我们要做全局的一个排序。就是按分数排,我也不管他语文还是数学还是英语全局排那怎么办?谁来给他呃,来一个新是吧,逗号,然后呢,软号后面跟着必须要跟over啊,我要全局排,那就直接跟分数全局排对吧?All对啊,那给指定一个啊,然后呢,哎,按照分数排from这个什么。
04:28
嗯,收到这张表。那我们看一下,先看一下这个全局的,哎,它里边呢,有很多呃,分数是一样的,对吧,这是rank现在一样的,这个O里边照样我们还能够写这个什么partition限定范围,那我们就正常的来说,是不是把这个相同学科在一起排啊,对吧,把相同学科在一起啊,我们先总的排大家看。12345看这个数据。
05:02
是不是并列就有RA,我们说了是可以并列的对吧,而且总数你看它两个六后面跟着是谁啊,跟着八不是七不是密集的啊呃,那如果说我们换一种,哎,是。这个应该就是667了,对吧啊667了,1345667啊,应该是这样的情况,它密集的还有一个叫它就按顺序正常排了12345678往下排的。Rank,你看总共12条数据,最后呢,最大的这个值是多少啊,11,这就是我们说的总数会减少指的这个意思,因为它是密集的对吧,667哎,它是这样来的,那还有一个就是我们所看到还有一个叫什么number完全不一样的对吧,叫行号啊。
06:11
那这个就不不存在重复的数据了,哪怕你这个分数一样的也不重复。走完了,然后呢,他是12中间你看两个一样的,他怎么样。六七去放的,六七去放的,但这边有一个点需要跟大家说明一下,刚才两个是一样的,对吧,同样的名次,所以无论谁在前谁在后无所谓吧,但是你会发现这个问题啊,你看我们的数据,从从那个数据角度来说啊。看是不是大海的前面,宋宋应该在哪啊,英语他在后面吧,但是。
07:11
包括前面的也一样啊,尽管你两个人都一样的对吧,两个六还是速度在前面这块呢,也是一样的,主要是因为它经过排序了,而我们按分数排,这两个值是不一样的。没有先后顺序吧,也就相当于,那为什么会正反了呢?是因为我们用的是MR引擎,MR引擎在计算过程当中啊,它会经过环形缓冲区。欢迎网城区里边出来什么要做排序啊,写到文件里面对吧?啊,但是一排序它俩是一样的,既然一样的那就干什么正常按顺序写对不对,一样的没有考试顺序写吗?但是我们知道欢迎网中区是不是反向一写的。对吧,正好在环形网中区里边。
08:01
啊,在环网城区里边放是这样的,那如果说你只有map任务啊,没有reducer任务,只有map Mr只有map任务,没有reduce照样用这个去读对吧,假如我也没有排序,没有指定排序规则,这个时候不会反,为什么对,因为他不走环境缓冲区,你可以去测一下,这些东西都可以自己测,对吧,你你在里面呢,你就用什么东西呢,K呢,你用那。用none readable当key这个东西不是不会排序吗?对吧,大家都是none的时候,它会排序吗?它不会对吧,你写一个设置为六色为一,以及设置为六个数为零,你看一下。啊,或者说压根就不设置这个radio色对吧,你去看一下,结果一个是反的,一个不反,嗯,因为我们如果有有radio的话,且不排序啊,它在环形网中区正好是反向写啊,正好是反的,主要是这一点需要大家注意一下啊,其他的没有什么好,这是我们所看到,那当然呢,我们可以做这个,在假如说我们还用润康,我们想呢,在这个。
09:12
各个成绩内部分别进行排序对吧?那这个总的排序其实意义不大啊,总总的排序对吧,又不是总分,你把各个学科放在一起排序啊,那有可能各个学科的总总分还不一样呢,对吧?那我们一般的是在什么学科内部进行排序,哎,Subject,然后这个分数对吧?各个学科跟各个学科进行提交。那我们看一下这个效果好来看啊这。数学是不是跟数学比了,独立的一个排名吧,然后这个是英语对吧,英语有相同的三三啊,然后呢是语文,诶都是独立的分别去排名的,对吧,那这个时候既然有这样的东西,我们就可以很好的取什么东西呢?我想学每个学科。
10:19
前三名。我要取每个学科前三名的学生。现在不四个吗?对吧,这怎么取啊,好取吗?这个都出来了,我只需要把这个内容做什么事把它拿过来,我要前三名,首先呢排序这个是不是得de了。要前三名嘛,刚才我们正常顺序排的对吧,那我们倒倒过来排啊,就按最大的放在最前面,这个是根据这个分数拿到了对吧?啊,那接下来呢,我们这张表只能叫什么呢?T表是不是对这个还有一个子查权呢,Select。
11:08
然后呢,我们写一下叫name。学科分数对吧,然后from第一表加一个过滤吧,We will什么东西?为我们是不是应该给它加一个联名啊,给这个注意这个东西啊,就over函数加别名加在over这个括号后面,加over括号后面,或者说我把这个写成这个样子啊,看清楚一点,这是一个整体的一个字段吧,对吧,这是一字段啊,那加别名是不是加在字段的最后啊,我把它因为现在要用了,对吧,我叫RK啊然后呢,为了RK要小于等于三,我们不要前三名吗?对吧?啊前三名好,那这边呢,我们加一个括号。
12:04
那大家想一下啊,如果说咱们没有这个开窗函数,你求这个前三名怎么玩,李米米怎么做,现在三个,那我现在三个学科,每个学科前三名最终几条数据啊。九九条数据吧,条数据,你的三就只有三条数据。怎么写来,你你报一下好吧。来的有人有人会写的是吧,来我先写下内部要学科要对吧,分数保留着。
13:08
啊,就单个一个一个的求是吧,然后一起来。一个一个求关键现在的问题,假如我不知道几个学科呢?我不知道有几个学科。这学科的名字我不知道,我就要按这个一个列做什么做分组,其实这就是一个分组套N的问题,对吧?好,先按分组要去求套N。大家可以尝试拿你的买搜去写一写,挺复杂的,他得自关联他这个well条件里边,他就说相当于个人事呢,把这张表再来一份。然后根据相同的K作为关联条件,如果说我这个分数大于你这个分数就要啊,就作一个处理,可以去尝试写一下,比较麻烦这个地方就是由于我们的开窗给我们带来的方便啊,就是你要自己这样写啊,就很麻烦的啊,超级麻烦的,它这次关联必须得自己跟自己去做,Join join语条件呢,当然是学科相同。
14:14
然后还有一个就是说,我必须我的分数要大于你的分数。对吧,然后看照应出来有多少条。啊,然后就干什么事呢,照应出来之后我要取,那如果说我这边分数是最大的,我去照应的时候,照应条件是我的分数大于你右边的分数,是不是相当于说我这个条数是最多的。照应之后就是最高分数,最高的这条数据而言,它的行数是最多的,因为我取的是大于这个条件嘛,就首先学科相同,然后呢,分数左边大。那如果说你是整个学科当中最低分,你有数据吗?没有数据吧啊,得用这种方式比较麻烦,而我们现在有了这个窗口函数就简单很多了,而MYL8版本以后呢,也引入了窗口函数,也不需要那样写了,那样写太麻烦了,现了好几层啊,写出来那个很麻烦啊,所以呢,有了窗口函数之后,我们求这个就是求分组套分的一个方式,给他分组求排名完之后呢,至于你想取前几,那就小于等于几,对吧,最后我们可以看一下,在这只有九条数据了,对吧?每个学科呢,求到的它的一个前三名啊,只有三条数据,当然有同学提到了,如果说真不行,我知道有三个学科。
15:38
我先把数学整个的全部过滤出来。按照这个分数排名倒叙对吧里三,然后把英语过滤出来,把语文过滤出来,然后把三张表用定在一起,这种方式也是不是也可以对吧?这是建立在你知道学科的基础上,如果不知道呢?就麻烦很多啊,不知道就麻烦很多,只能是自己去关联自己啊,用这种方式查这个呢,是我们所聊的用窗口函数呢,实际上我们分组套N的一个内容啊,就是分组套班,这下面有啊三种都可以啊,三种啊,当然这三种的区别就在于是否能重复呗去做这些事情。
我来说两句