00:00
好了,小功能咱们现在已经做完了,那咱们接下来是不是该讲下一个我们的方法了呢?不是。咱们这个跟史该集合的方法还不一样啊,咱们史该集合方法讲完就开始讲下一个了,咱们这不行。为什么?因为我们RDD的方法其实就是我们封装的逻辑,那么你封装的逻辑我们讲过了啊,你这个逻辑是要在计算当中去分发并行计算的,那怎么能体现出并行啊,对不对?所以啊,这个呢,我们要给大家体会一下啊,否则呢,你光是个普通的方法肯定是不够的嘛,所以我们接下来要给大家讲的就是如何体现我们RDD方法的并行计算,来这个呢,我们一块儿给大家来演示演示啊,来把这个关掉,关掉以后我们这里呢再来拷贝,拷贝以后把这个去掉,我们写上叫PAR,咱们叫并行计算啊,来点击OK,好,放过来,嗯。
01:01
放过来以后,那我觉得呢,这些咱们暂时不要了,咱们还是怎么简单怎么来啊,就是为了让大家看效果,咱们叫RDD,然后等于SC,点我们的make r DD,然后写上我们的1234。好了,那我写完了以后呢,这个时候我们的RDD开始点我们的map,很简单呢,同学们,我就是要把它干嘛呀,要让它乘以二,所以我在这里写上number,然后写上一个箭头,我叫number乘以二,好,但是呢,我在这个地方我想打印一下,我想打印什么呢?我就想打印这个number它是什么?好了,我这边写上一个number,诶就是这样的是吧,我想看看这个number是什么,诶那我觉得我就别乘以二了,我干嘛呢?我直接写上一个点to,就就我就返回number吧,好不好,我这个number不变不是就更能体现出来了,那这个时候大家看一下,我们写上咱们叫map RD,这样的话呢,我们这就是我们的number啊,就是它了,但是我光做一个肯定是不够的,所以呢,我们拷贝啊拷贝,拷贝以后拿过来,拿过来以后我写上一个map RD de。
02:18
Map r就意味着我把这个map r我再做一个转换,但是我依然不变,还是我还是打,但这个打印呢,我要给它区分一下,这个怎么区分呢?咱们这样啊,咱们这样来我写个箭头吧,诶好了,然后这个呢,我写个井号,是为了区分两次不同的操作啊,是这样的,所以那么现在呢,我们来看一看啊,来我们拷贝,拷贝以后点我们collect,我这个时候不采集数据了,不是不去打印数据了,我们还采集不采集它是不执行的嘛,所以我现在呢,我们来运行一下啊,咱们看一看运行。变形以后看一看我们的执行的效果啊,同学们来,嗯。
03:07
看一看我们当前的这个执行效果,大家有没有发现我们的这个地方的执行的顺序好像是乱的。按我们的理解是1234,那么这个时候大家会发现是不是应该是我们的什么1234,但不是吧,这个箭头你会发现它执行3214是乱的,同样道理,我们的这个井号是不是也是乱的呀?诶这个我就搞不明白了,到底怎么回事儿,但是呀,好像诶我们线程的并发执行,并行执行能够乱吧。他们就不是有序的,对不对,所以啊,好像这个感觉是有的,但是啊,这种操作我们觉得演示的效果不明显,所以我们先一点一点来,同学们看干嘛呢?我现在呢,先把这个地方写上一个逗号一,我先写上一个逗号一以后就意味着我现在有什么呢?我们现在的这个地方啊,看一看我们的这个一个分区,它的执行情况,可能效果会更加明显啊,同学们来我们运行。
04:15
刚才呀,我们看的不是很明显,现在呢,改成一个我们的分区,那么改成一个分区以后,那记住了同学们一个分区的数据,他们就没有办法并行了吧,没有办法并行的话,你看看他是一个什么样的效果。诶,咱们大家看啊,好像有点规律了吧,它是把第一条取出来执行了我们的箭头对不对。然后它执行完箭头之后,它有没有执行二,你发现它没有,它是我们的一执行完箭头之后,是不是该走我们的井号了,所以说就意味着我们的一,第一个数据,它的每一个计算它都全都运行完毕之后,它会执行下一个二,对不对,然后呢,我们的二,它执行完箭头和井号之后再来执行三,三执行完箭头井号之后再来执行我们的四,就意味着我们数据是一个一个执行的,而每一次的执行其实都是什么?把整个的计算全做了一遍吧,对不对,同学们,诶,就是这样,所以啊,咱们这里呢,通过这个现象咱们就能搞清楚一件事情了,啊来我们的这个,嗯,RDD的什么,我们的计算啊,它的计算它是什么呢?是我们的分区内啊,咱们叫做分区内,或者说叫一个吧。
05:40
所以我们先就一个嘛,一个分区内的数据,它什么呢?它是我们叫做啊来是。啊,咱们叫做什么呢?咱们叫做嗯,一个一个执行吧,就这么理解吧,一个一个执行啊,我们的逻辑啊逻辑那么只有啊来只有我们前面一个数啊,一个数据全部的逻辑执行完毕后啊,执行完毕后它才会执行下一条数据啊或者下一个数据,诶就是这样的,这个是我们能看出来的,对不对,所以啊,它的分区内数据执行是有序的啊所以呢,通过这个现象呢,我们的分区内它的数据它是什么呢?有序的啊,它是有序的,嗯,啊分区内数据的执行吧,啊咱们的数据的执行它是有序的,这咱们看到了,诶那我现在如果是两个分区呢。
06:39
同学们想想。咱们刚才呀,是我们的什么一个分区,1234,当我的一走完了是吧?哎,全走了一遍该二了,二走完一遍该三了,三走完一遍该四了,可是现在不是了呀,我两个分区了,那么个分区的话,按照咱们之前给大家讲解的,是不是我们上面一个分区是一和二啊,那么下面一个分区是不是三和四呀,对不对,所以啊,从咱们之前的分析的角度来讲的话,这一个分区之内是不是先走一。
07:14
再走二,同样道理,这个先走三再走四吧,所以我们接下来要执行的效果当中,四是绝对不可能在三之前执行的,同样道理,二也不可能在一之前执行,对不对,但是由于你是并行计算,那么就意味着这个一和三谁先执行不确定,二和四谁先执行也不确定,对不对?好,我们简单的来分析了一下之后,我们来看我们的执行情况啊,运行。运行以后我们来看。看一看啊,来首先来我们说过我们的一和三啊,谁先执行不确定,那么我们的一啊就先执行了,然后呢,这个时候记住并不是说一执行完箭头,再执行完井号才该三,不是的,它们是不是可以同时执行啊,对不对,就是你的一走这儿了,你的三也可以走这儿吧,然后呢,你的一走井号,我们的三也可以走吧,对不对,但是当你的一走完了,我们的二是不是就开始走了,对不对,然后呢,我们二走完了以后,你看我们这个三它也可以走势了,所以啊,这个跟我们刚才预想的是完全相同的,那么我们在这里呢,就要给大家说明一下了,就是不同分区啊,来说一下不同分区啊,他们的数据计算啊,数据计算它是什么呢?无序的,他们有顺区,所以上面是分区内,它的执行是有序的,而我们不同分区之间,他们数据的执行其实是无序的,哎,这个事儿同学们需要知道。
我来说两句