00:00
我们再来看一个排序啊,他是第的。啊,Ribu又多了一个什么是吧,然后这个ribu它是什么意思呢?它类似于MR当中的一个。分区。又出现了又又又什么分区是吧?哎,它其实类似于当中的分区,也就是最终啊,它产生多个文件。就是你二当中你的分区字段跟你的排序字段可以是可以不是一个吧。可以吧,也可以是同一个了。是不是啊?一定要清楚啊,一定要清楚啊,我感觉怎么有点迷糊呢,他二当中你的分区字段和排序字段同一个或者不是同一个都可以吧,哎,它这个汉当中也一样的,因为它这个区别啊,它就类似于当中那个part。
01:04
类似于阿玛。那个帕。它这它一般啊,会跟这个缩半语句连起来用,而且在缩半之前,也就是说它在对于每一个分区当中进行排序吧。啊,进行排序,就最终的输出的结果跟你他妈是类似的,跟你妈是一样的,那我们来看一下啊,这样我们来举个例子,还是同样的。将它写入到一个本地的一个文件,我们叫。T吧,这的啊,写到这个文件夹下,然后我们查询的东西呢,也是这个。但是此时我们要改变一下,我们要让按照部门分区,我们不是emb那张表里边有十号部门,20号30号部门,对吧?也就是说我们想把这三个部门的数据啊,写到三个不同的文件里边,然后每一个文件里边呢,它这个数据的排序是按照薪水排序的,可以吧,需求懂吗?
02:07
OK,那这个是的T。你去为了卖,我们是要按什么分去啊?部门号码d number。然后按照。说,然后按照薪水进行排序啊,我们写到这个distribute这个result这个文件夹里面,那最终。会什么样的?首先看它的一个reduce的一个。等会我们再把那个个数改为负一,再看一下这个语法对吧。按理来说他应该是什么样的,如果你改成负一了。
03:02
首先首先我们看一下这个结果,好吧,现在就是我们正好设置的个数呢,就是的个数和分区的个数是不是一样的呀。来呃,还下这个区的,看他有三个区吧,然后我们看一下每个区里边是不是我们所要的,第一个区里边是30号。第二个趋势。然后他是十号,然后最后一个分区是20号,20号说明他这几个区啊。是不同的部门都放在一个区里边的吧,哎,这是没有问题的,这是没有问题的。接下来我们要测的一个问题是,如果说我们把它的一个。分区个数改为负一。再执行这个语法,它会怎么样呢?
04:01
是不是那。点job.reduce s等于负一,我们改回去吧,你可以改完之后你查一下,确确实实改成了负一,改成负一之后。我们考虑这样把刚才的语法。可以吧,其实你不改也无所谓了,为什么?因为是的吧,覆盖是不是覆盖。然后下一行是查询语句。还是这个长句,语句还不变啊,我们来看一下它在默认这个负一的时候。会是什么一个情况?他只有一个了吧,哎,只有一个了,这个跟我们学mmr的时候是不是一样的呀。妈的时候,哎,你自定义分区的时候,自定义分区是不是写了有几个分区号啊,什么01234啊五二,然后最后如果说你reduce个数不设,或者或者说你设置为一个,最终输出的结果是一个吧,一个,而且两个最后要相等的。
05:21
要相等吧,如果不等会产生什么情况?有两种情况呢?如果说reduce的一个个数大。的个数大会产生什么情况,有空文件是吧,如果说分区的个数大呢,报错了,报错这你要注的,而且还有一个什么情况,如果说相等。假如说你分区的个数写的是四个,然后你的reduce是四个,但是你的分区号是怎么写的,你分区号写的是1234。那会怎么样?你们没有测这种情况吗?就是你是四个分区,你分区最后不是自定义方法该了partition那个方法里边返回的不是分区号吗?是不是啊,返回的是分区号啊,你注意啊,如果说你返回的分区号那个不是你自己写的吗?你要想返回1234或者零一二三都可以吧,如果你返回的是1234,但是你最后reduce个数是四个。
06:23
你们没有说这种情况是吧?这个也会报错。也会报错,报什么错呢,这个分区找不到,就是跟你就是之前所说的跟这个。二是一样的,懂我的意思吧,就是你前面是四个,然后reduce设置的两个。不是报有的分区找不到吗?数据不合法还记得吗?那个错是不是。对吧,这种情况你的分数号人要三四,但是你的六的个数呢。也是四个,但是它还是会有一个分区为非法,就这个。
07:03
因为你最终按照这个输出的,它是拿到各来形成最后的输出文件嘛,输出文件的名字是不是output方来决定的呀,它形成的文件的名字叫00000,然后杠零杠一杠二杠三,它是这四个东西,然后你的分区号呢,它是根据这个一来找这个一,然后二找这个二,最后四找到。他也会报错。他也会报错,所以说这就要求我们啊,你自己写MR的时候,你要用到自定义分区的时候,你这个分区号从零开始,从零开始,而且是1234这种递增的,你不要中间跳着任性是吧,0235不要这样,不要这样,好吧,这块提出大家注意一下,你们可以下去测一下,测一下就是你的分区号,你注意这个前面是分区号,后面reduce决定的是文件的个数,以及最后那个尾号,他这两个尾号要对应起来,他才能处理它的数据,懂我的意思吧,如果说你现在写的这种1234,最后是四个,不好意思,他也会找不到,也会找不到。
08:13
这是我们所讲的啊,其实你看你从这一点就完全能看出来什么。这个distribute by是不是跟partition是一样的呀?是一样的吧,只不过它采用的是什么哈西含吸,那你含吸之后你就能看出来它为什么零号分区是30,为什么。一。除以三零吧,这个三等家一吧,这个三呢,这个看。是不是分区号跟最终的输出文件那个ID号是一样的呀,一定是一样的啊,这样一看就知道,那有的同学可能想到为什么刚开始就是刚看这个文件的时候想不明白,为什么第一个是30对吧,那我们理解应该是十二十三十是吧?哎,其实它也是除以那个分之号。
09:05
除以分区的个数来得到它分区号的,来得到分区号的是这样的,这是第区的呗,第的呗。通常他是一般都是跟这个说在一块用的,在一块用的,因为你在处理这种数据的时候,一般都会想着把这个数据排个序,排个序。如果说我们不加速呢。我们还是把这个属性给改回去啊。大家应该知道是什么情况了。就是我们最后不加这个。我们还是把它改成三,要不然你就一个也没有什么意义是吧,改成三,然后呢,最后如果说不加说了会什么情况,就最终这个数据。这一个文件里面还是这些数据,但是你会看到它并不是按照这个。
10:06
它它的顺序是什么顺序呢?就是你原本读进来的顺序吧,你原始的数据存的是什么顺序,他给你存什么顺序吧,还是这样子的,但是通常都会跟这个so back连在一块用的,连在一块用的啊,排个序啊,局部内部有序啊,So back本身就是一个reduce,内部有序嘛,啊你败了以后。它是不是针对一些不同的reducer来处理的呀,哎,它让它局部有序。
我来说两句