00:00
好了同学们,那么我们刚才呢,给大家讲了Lam的时候啊,其实我们的函数说明当中有这么一句话,他说了我们的分区不变。那这个是什么意思呢?这里我们再给大家解释一下,就是我们在转换之前和转换之后啊,它涉及到并行的能力的问题。比方说诶,我们在转换之前,我们的并行的分区是三个分区,那么我们转换之后。它默认情况下分区数量是不变的,还是我们的三个分区,那这三个分区它的数据有没有变化呢?其实数据也没有变化,那这个怎么理解呢?咱们一块儿给大家看一看来,呃,比方说咱们在这里呢,拷贝。拷贝以后呢,大家看一下,我们这里有一个RDD,然后呢,我们有一个新的,有一个旧的啊来这个比方说是我们的旧的,这是我们新的,那么我们旧的R啊,在我们当前的这个位置,比方说诶我们有分区,这个呢,我们用一个颜色给它标一下啊蓝色好,那这个呢,我们用一个紫色给它标识一下,就意味着它是我们的另外一个分区。
01:16
当我进行了一个转换的算子之后,那比方说我们来一个map吧,哎,咱们之前的map呀,Map parts呀,我们的flat map呀,这些我们所谓的算子呢,其实都是一样的,分区是不变的,那比方说我们就写上一个map,那这个map当你放到这个地方的时候,记住当你把旧的变成新的的时候,他们的分区数量首先是不会变的啊,这叫分区不变,对吧?还有一个就是我们的数据。咱们的数据比方说是个A,那你想做是什么功能呢?诶我想做一个功能呢,就是我们的map,它里面写个括号,括号里面写个下划线乘以二,它就表述的是把你的内容呢给它乘二,那所以呢,我们的A当执行map的时候,它这个时候就会变成两个A对吗?它会变成两个A,变成两个A之后,诶记住这个时候它不会走向紫色的分区,它还会走到我们的诶这个分区,为什么呀?因为我们分区之间是独立的。
02:22
你最终是要发送给我们的executor来执行的,对不对,那如果你发送给excuor来执行的话,那么你想想你怎么可能发给他呢?不可能,肯定还是发给自己嘛,所以它的分区是不可能发生改变的,对不对?那好,同样道理,如果你是我们的B的情况下,大家看一下你这个B在走咱们逻辑的时候,同学们看往这儿走,是不是它会变成两个B啊,诶就是这样,然后这两个B呢,诶它也会往下面这个紫色的分区过去。还是一个道理,因为我们在并行计算的同时呢,他们是发给了不同的节点来执行呢,那么发给不同的节点的话,那么我们的这个分区之间,他们是应该有关系的,什么意思啊,因为我们这个蓝色和这个蓝色,大家想想就跟管子一样,跟管道一样,这两个管子可以无缝连接,为什么呀,因为跟别人没有关系啊,他们是自己的数据啊,直接连接通了之后,那么就可以直接过来对不对,诶就是这样的,而我们这个B呢,也是一个道理,它跟两根管子一样,直接就连通了,连通以后这个B就顺着管子就流过来了,对不对,他们不绝对不会说等待别的分区的处理,不会的,那否则那个性能就太差了,对不对?所以在这种情况下,分区不变,数据转换之后,所在的分区也不会发生变化,好给大家来证明这一点啊,看看我们这个的说法是否正确,那我现在回过来,呃,回过来以。
03:55
后把这个呢,我们去掉,咱们在这儿呢,就拿这个零五吧,啊,或者说我们拿这个零一也可以啊来咱们拷贝,咱们给大家演示一下这个分区的事儿,咱们叫part啊partition嗯,好,点击OK,点击完成以后我们改一改啊,然后呢,我在这个地方我看看啊,嗯,咱们把这个把这个去掉吧。
04:16
去掉以后sc.make r DD,然后list,我们叫1234,然后给它一个我们的什么二,你给他一个二之后,那么我们这里的RDD我们放过来,放过来以后啊,咱们的这个RDD点我们的map,我们的下划线星,我们的R,然后呢,给它拿过来,我们写上叫做map r DD,好了,我们的map r DD点我们的save as,嗯,然后这里写上行了,然我现在这边已经可以了,可以了之后现在我准备要运行了啊,那么我们要运行的话,首先第一个咱们先分析一下。
05:02
我们现在的这个分区是不是一和二带一个分区,然后呢,三和四在一个分区吧,对不对,当我们转换之后,记住啊,首先分区不变,分区不变的意思呢,就是说还是两个分区,那么这个时候当你乘以二之后,二是在一个分区,而且它们分区编号应该是相同的,那么这个三和四应该是六和八,它们的分区编号应该也是相同的啊,这是零号分区,这是一号分区,这个是零号分区,这个是一号分区,所以为了验证起见呢,来大家看,我再来一个点,我们叫save,我们把之前就是在你map之前,咱们先给它,哎保存了,所以然后这个我写个一。对吧,我写个一,咱们现在运行一下看效果啊,记住这个应该是我们之前的分区效果,这个应该是我们这个的分区效果,咱们来验证一下,看看咱们说的是否正确。
06:06
如果它正确执行的话,那就说明啊,我们的分区和分区之间在默认情况下是保持不变的啊,那么你的数据也不需要去到别的分区去啊,好了,我们来看一看吧,Output output1,我们先看一看,我们再转换之前的来打开,打开之后两个分区没有任何问题,一和二在一个分区没问题,然后我们的三和四在一个分区对不对,那好,那么我们在转换之后,那这个时候呢,我们的二和四应该在一个分区,而且是零号分区打开。二和四,再看下面六和八,跟咱们之前说的完全相同吧,同学们对不对?诶这样的话就可以了。
我来说两句