00:00
好,同学们,我们接下来讲下一个我们的算子叫做cor啊,那么这个算子呢,它的作用是什么呢?它叫缩减分区,那什么叫缩减分区呢?这个我们给大家稍微介绍一下啊呃,比方说我们之前说过,我们如如果有两个分区啊,比方说里面现在呢,每个分区里面有1000条数据,对吧?然后呢,我们会有个field过滤功能。那么这个过滤功能呢,它可能啊,比方说诶过滤成十个了,这个呢也过滤成十个了,那这样的话就会发现一个现象,数据量已经变得很小了,那么这样的话呢,如果你还用两个ex去执行的话,会显然呢有点浪费资源,为什么呢?因为数据量很小,但是你调度的成本很大。所以呢,我们能不能够就用一个我们的exor来执行我们这20条数据呢?对不对?但是如果你要想用个我们的exor的话,那你就得保证我们的分区不能有两个,为什么呢?因为分区是并行计算,那么并行的话,那么这就需要两个我们的什么我们的ex,如果你有一个ex的话,那么它也是两个task,两个任务啊,为什么呢?它要并行计算嘛,一个形成一个task,一个任务,它形成一个任务,那么这两个任务呢,并不能够同时真正执行,那么这样的话,它一个执行,再执行另外一个会感觉不合适,所以如果我们能把两个分区给它缩减成一个分区,那么这一个分区当中它就是20条数据,然后呢,形成一个我们的计算任务,再发给我们的EXQ执行这个就会显然顺理成章一些,对不对,所以啊,在某些情况下,我们需要缩减分区啊,所以说呢,我们这里就会用到这个Co啊,它这个缩减分区之后,会减少分区的个数,减小任务调度的成本啊。
01:47
啊,这个呢,我们给大家来看一个啊来。来拷贝啊,拷贝一下,然后呢,我们这写上一个十啊,然后呢,放过来点击OK,嗯。好,然后呢,我们把这个呢,我们去掉啊去掉然后呢,这里我们写上啊,咱们写上咱们是1234,然后呢,我现在给四个分区,给四个分区的目的就很简单,是每个数据放一个分区均匀分配对不对,那好,那我接下来呢,我们RDD点我们的cor啊,咱们的这个来啊,然后这个里面的参数是什么呢?诶就是一个partition,就是传递一个分区的数量,那好,我就给他一个分区的数量吧,比方说二。
02:29
那么现在呢,是每个分区一个,是不是显然我们的分区数量非常少啊,对不对,所以啊,我们可以把它合并缩减分区,那么缩减分区以后缩减成两个,那么这样算下来的话,是不是应该是我们的两个数据就一个分区了呀,哎,所以我们点啊咱们来VAR回车,回车以后呢,我们写上啊,咱们叫做new r DD,然后呢,把这个拷贝,拷贝以后呢,点我们叫做save啊给它保存成我们的分区文件啊。好,那我回过头来,我们到这边,嗯。
03:02
我来看一看啊,它的执行效果,因为默认情况下四个分区嘛,每个数据放在一个分区当中,这个是我们能够明白的啊,那么接下来呢,就是我们的合并分区,那么合并分区按我的理解呢,就是一和二这样一个分区,三和四这一个分区,对不对啊,应该就是这样子啊嗯,好,我们稍微的等一下啊嗯。嗯,好了,执行完了,执行完了以后我们打开,打开之后呢,我们来看一看,点开,点开以后一和二,然后呢,我们这个三和四,诶你会发现是不是这样,同学们,所以这个我觉得没有任何问题吧,对不对,诶就是这样啊好了同学们,那这个是其实比较简单对不对,那比较简单的情况下,那我们再举另外一个例子,比方说我们的五和六,然后呢,现在干嘛呢?我们写上什么,我们的三,诶我们的三,那么这个时候大家可以看到啊,我们的1234563个分区,那么就是121个分区,341个分区,561个分区,我现在想让它变成两个分区,那么就是1231个分区,4561个分区,对不对,那所以呢,我们再来看啊,重新再来删掉。
04:13
呃,删掉以后我们再重新来执行啊,看一看我们的输出效果啊,看一看我们的这个结果是什么样子的,嗯,我们的预想结果呢,就是123放在一个分区,456放在一个分区,对吧。好了,他执行完了,咱们打开,打开以后同学们会发现点开点开以后,诶跟我预想的好像不是很一样啊,因为我预想的是一和二在一个我们的什么,还有一个三在一个分区,然后呢,我们的456在一个分区,对不对,我们打开发现3456在一个分区,那这个是怎么回事呢?首先啊,这个我们就得画图给大家解释一下了啊来,因为你直接看你可能看的不明白,现在呢,我们来看一看,来我们现在写上一个RDD,好,这个RDD我们来一个,我们一个红色,嗯,然后呢,这边我们写上一个绿色啊,咱们给它一个绿色啊,这是一个旧和一个新的RDD,然后呢,里面的分区啊,咱们是这个样子的啊来,这是我们的分区,诶,咱们应该是三个分区嘛,对吧,诶三个分区原来是三个分区啊OK,然后呢,我的数据呢,应该是这个样子的啊,我们的一,然后呢,我们的这个地方叫做二啊咱们叫做二,嗯,好,那么我们接下来呢,我们来说一下啊,咱们来嗯把它。
05:29
放过来,然后再往下放,嗯,是这样的啊,然后呢,我们这里呢写个三,然后呢,我们这写个四好了,然后我们再来写个五,然后呢,我们再来呢写个六,诶就是这样的,好,那我现在写完了之后呢,我们会发现,当我们做完咱们的这个cor操作之后啊,分居数要改成两个了,所以呢,我们拷贝复制一下,复制以后我就放到这边,这边就是两个对不对?所以呢,我们的箭头当指向过来的时候,没有任何的问题啊,拿过来放到这边,可是数据呢,稍微的有点变化了,为什么按我的理解是123应该在一个分对不对,然后456在一个分区,记住啊,这是我预想的结果,所以来复制,复制以后我们觉得应该是这个样子啊,应该是这个样子,然后呢,我们的456,诶,我们的应该放在这个地方,这样的话比较均衡吧,对不对,同学们应该是这样子啊,OK,放这儿,但是我们会发现实际的结果它不是这样的,实际结果是什么呢。
06:26
一二在一个分区,3456再一个分区,也就是说我们真正的效果来复制啊,记住来刚才我们看到的是我们的什么是我们的预想结果,那么实际的结果呢,它其实是我们的3456,那你说这是咋回事儿呢?对不对?首先呀,我们上面的这个为什么它不是呢?是因为我们的Co less的这个算子呀,它默认情况下,它是不会让数据打乱重新组合的,所以我们这里稍微的解释一下,就是为什么会转动现象啊来那么我们的cor,我们的方法,它默认情况下,它不会什么呢?我们说将我们分区的数据打乱重新组合,它默认它是不会的,那不会的情况下,所以大家看一下我们这里三啊,咱们这里的三和四,如果啊,大家可以看到,如果到这是个三啊,大家到这儿是个我们的三,然后呢,在这儿是个四的话,大家想一想是不是同一个。
07:27
分区的这个数据被打乱了,而且跟其他的分区的数据重新组合了,所以说这样的话是不行的,那默认情况下它是不能这么干的啊,默认情况下它是没有办法进行我们的数据打乱重新组合,它就仅仅是缩减分区,缩减分区的效果呢,就是我们现在的这个样子,所以大家会发现,你看诶这个地方就把它放过来了,然后呢,再来复制一下,复制以后放到这儿好,再放到这边,大家有没有发现我的数据被打乱重新组合了吗?首先第一个数据没有被打乱,为什么呢?三和四是不是还在一块儿,五和六还在一块儿,对不对,所以这个首先没有被打乱,一和二还在一个里面,所以这个是我们默认情况下这个cor的效果,还有老师,那你这么着的话,你的数据不均衡啊,对不对,那你这个好像感觉不太好,而且如果两个分区的数据很多的话,那你这个合并会要缩减分区,就导致数据倾斜了嘛,对不对,诶确实。
08:27
这是有可能发生的啊,为什么呢?因为它并不是说将我们的数据呢平均分,它会导致数据不均衡,那你说这个时候该怎么解决呢。我们的目的是把分区减少,但是你数据不均衡也不是我想要的,对不对,所以啊,咱们来给大家说一下啊来那么我们说这种啊,这种情况下的什么呢?缩减分区啊,缩减分区它可能会导致可能会导致我们的数据不均衡啊,不均衡,然后呢,我们说出现我们的数据倾斜,那该怎么办呢?诶,那我们就要想办法让它的数据均衡一些,那如果我们想要让我们的数据呢,什么哎,不出现啊,不出现啊,数据均衡吧,啊均衡我们可以进行什么呢?咱们的杀否处理。
09:17
诶啥意思啊,就是说如果你想让数据均衡一些,你就让数据打乱重新组合就可以了,啊就是这样,那这个怎么理解呢?其实很简单,因为我们cor的。方法的第二个参数,大家看什么东西啊,他们点一下点点完以后看这什么东西,这个叫杀Le,他就问你了,诶是不是杀Le,默认情况下它这个地方是不杀Le,那所以说它的数据不会被打乱,重新组合嘛,但是如果你想让它杀Le,把它变成true就可以了,所以同学们看来把这个呢变成true啊,来写成一个true OK,那这个地方呢,我们就可以来了把,诶我们把这个地方呢给它来啊,把这个给它注掉,嗯。
10:01
做掉以后把这个删掉啊,来同学们看,这个时候我们看看我们的数据会变成什么样子啊,来运行。运行以后我们看结果啊,来看一看我们的结果是什么样子的。这个的执行结果呢,我们应该会发现啊,它里面的数据呢,应该是比较均衡的啊,所以我们点开,点开以后打开,打开以后大家会发现它其实确实均衡了啊,为什么呢?三条数据,这个是不是也是三条,但是你会发现有规律吗?没有规律,为什么?因为它里面的数据大家看一下是不是被打乱了,打乱到什么程度了呢?你看我们这边是145,所以呢,它变成这样子了啊同学看它变成一四啊,然后五,然后呢,263,基本上我们的一和二被拆开,三和四被拆开,五和六都被拆开了吧,对不对,但是也没有看到什么规律,所以这种效果呢,其实就是一个杀手的效果啊,就是这样。
11:00
所以啊,我们这里写上啊,它有个S的这个效果,所以啊这个呢,我们希望大家注意一下,就是我们第二个参数是可以让数据变得均衡一些的。
我来说两句