00:00
好了,同学们,那么我们接下来咱们该说RDD了,咱们为什么前面要讲IO呢?就是因为我们的RDD它不是一个最小的计算单元吗?那么这个计算单元在我们实际的需求当中,是需要不同的计算组合在一起的,那么这种组合的方式就跟IO的似,你看咱们的IO不就在逐层的进行功能的加功能的,我们的RD是一回,所以如果前面咱们给大家画的这些图大家能够明的话,我你RDD的这个计的你就能够明白,没有何的问题啊来,我们接下来给大家看看是不是这样的啊,来,咱们回过头来,咱们看一下咱们之前给大家写的,咱们这个叫做word count,咱们打开。打开以后同学们看啊,我们打开这个吧,打开它以后咱们别的不说,首先看第一个在这个地方是不是构建出了一个叫RDD。没问题吧,同学们,它就是一个RDD,好,那么我们现在呢,可以去看一看,点一下点点完了以后再点击它,然后往下看,它里面有个什么东西叫new hadde r DD,那么这个时候在咱们这里,咱们给大家画一画啊,做一个对比来拷贝。
01:19
拷贝以后,那么这里呢,我们就写上啊,咱们叫had duop,我们的RDD,它这个地方就是用来读取文件的,为什么呢?因为咱们后退啊,好,咱们后退,后退以后咱们的这个叫text file,不就是应来读取文件吗?那所以文件就应该是在这个地方读取的,好,我们把咱们这个文件咱们拿过来,诶给它复制一下好啦,那你把文件你要读取过来的话,那我的箭头就得指向它呀,对不对,我要箭头指向它了,可是呀,你光读取文件没有任何的义啊,对不对,你要干嘛?你是不是应该把我们读到的一行一行的数据给它进行我们的扁平化操作呀,所以我们下面会有个叫flat map,对不对,那这个flat map在干什么呀?同学们看我们点一下,有没有发现它的扭出来另外一个RD。
02:11
而且它会把当前的那个RDD的对象给它传进去,所谓的传进去是不是就等于包装进去,同学们是不是这样的,所以来我们看看啊,咱们为了让大家看的比较清楚一些,来我们把这个去掉,去掉以后在我们刚才的这个地方咱们找一下,咱们叫做它点一下。呃,这个地方呢,我们叫做new啊,咱们来拷贝,拷贝以后在咱们这写上咱们叫做RDD,然后呢,这个RDD等于它对不对?可以这么理解吧,现在干嘛了呢?现在咱们写个r dde,然后写个RDD,它等于什么叫做new,我们回到刚才的这个叫flat map点有个叫map parts RD,所以拷贝拷贝以后放过来,放过来以后同学们看它怎么了,把你当前调用Fla map的那个对象,大家看一下来我们的map这个是不是属于这个对象呢?所以这个不就这个RDD吗?那不就等同于把这个RDD给它放进去了吗?是不是给它包进去了,那么包进去的话,那么我们画图的时候是不是就可以来了,所以拷贝拷贝以后同学们看我就放到了这个位置啊,来放这个位置,那这个呢,就应该给它拷贝了啊,咱们找一下。
03:27
咱们叫做map partitions r啊,就是这样的,放过来,放过来以后咱们再来往下看啊,往下看,往下看以后,那么下面怎么了,叫map,这个map呢,我们再往下点,点完以后怎么了,又叫做new map parts r DD,那好大家看这个图,这个图形当中是不是又要包一层,所以我们拷贝,拷贝以后咱们拿过来啊,拿过来以后我要稍微的我们变一下了啊,咱们叫map parts r,但是啊,我为了区分它呀,咱们在后面写上一个叫做map啊,然后这个呢,我们写上它叫做什么呢?叫做flight map啊,咱们叫做flight,好,咱们的map,然后还有呢,就是这个咱们写上叫tax file。
04:14
所以啊,他们的方法不一样,得到的RDD也不一样啊,行了,那这个是不是就完事了呢?还没有,它现在还有一步叫做reduce by key,我们点一下,点点完以后再往下,再往下,诶走到下面的时候,大家看一下什么东西叫S的RDD吧,所以来我们拷贝,拷贝以后再来一层啊,咱们再来一层,这个给它置于底层,这个呢,我们来写上啊,咱们叫沙。好了,那么我们写上叫reduce by key啊reduce by key,好,那这个颜色呢,给它稍微的咱们变一下啊,咱们变一下行了,那大家会发现这就是我们的word count对不对?好,那么你在这个地方你进行了我们的什么,诶我们的这个包装,包装以后你干什么了呢?它后面会有个叫collect,然后循环打印对不对,所以它还是打印在控制台上,然后呢,我们接着往下来啊,往下来,往下来以后它是直接打印吗?不是,它是不是有一个叫collect呀,叫采集呀,它是有个采集的,所以把这个放过来,放到这里来。
05:21
好了,这个呢,我们就叫做什么呢?叫做collect,我把这个图画完了之后,现在我们来假设我们开始要读取数据了,那么你读数据是怎么读的呢?比方说我现在呢,读的数据呢,就是这个样子的,我把这个去掉吧,把这个去掉以后,我把这个咱们拿过来啊,咱们拿过来。把它放到这边啊,或者呢,我稍微的有点往这边挪一下,会不会好一些呢。把这个挪一下啊,来挪一下以后把这个呢,我放过来啊,比方说这就是我们的file啊,咱们的文件,那么文件里面是有内容的呀,比方说我们在这个地方,我们写成叫hello啊,咱们叫做什么skyla,好了,接下来往下,下面呢,我们叫hello,咱们叫Spark。
06:03
咱们叫hello啊,咱们叫Spark,那么你的这个叫海杜RDD,它就会读取咱们的这个文件,对吗?它如果读取这个文件的话,就会把里面的这个一行一行的给它取出来,所以说我们拿到的其实是一行一行的数据,所以咱们拿过来放到这里啊,放这儿咱们叫做什么呢?Hello OK,然后呢是skyla,好,接下来我们在这里呢,复制啊,复制以后放过来,这个应该叫做hello啊,咱们的Spark,诶就是这样。但是你要记住了,你现在只是把我们数据一行一行读过来了,但是你能做word count吗?不行,对不对,所以我要补充功能,补充什么功能啊,将一行一行的数据给它进行扁平化操作,就是分词操作吧,要把hello和盖给它分解开,对不对,所以这个时候我们的hello,诶应该给它分解开,叫扁平化操作,也称之为叫分词效果,对不对?所以来我们现在呢,放过来,这个呢,我们叫做skyla,嗯,咱们叫做skyla,还有我们再来啊,咱们叫做hello,把它放过来,还有我们的Spark,嗯,放这边。
07:13
好了啊,咱们叫做Spark,那你这么写完以后,诶,我们说了不行啊,为什么还不行呢?是因为你光把它变成单词了,你没有做聚合,我不知道我的单词有多少个对不对,所以咱们当时讲了,为了能够使用Spark的方法,叫reduce by key,你需要转换它的结构,那么这个转换结构也算是一个功能,所以来把这个呢给它复制,复制以后诶就到了这儿了,到了这儿以后大家想想它是不是就变成我们的一了呀,诶,就变成了这种一啊,它表示的是hello这个单词它出现了一次,那么同样道理啊,咱们该了啊,咱们写成一个一就可以了。呃,还有我们这写上一个咱们的逗号一啊,咱们在这里写上咱们的hello,然后再来啊,我们写上咱们叫做Spark,嗯,然后写上一个逗号一就是它了,好了,那我写完了以后,那怎么统计啊,那我们说了reduce by key,相同的key来做value的聚合,对吧?那么相同的key它不就放在一起了吗?两个hello就放在一起了啊,然后呢,Skyla和Spark他们两个不是相同的K就给它分开就行了,分开以后,那么最终的结果大家看啊,来,把这个往后挪一挪,挪一挪以后,那这个时候来吧,我们的嗨,诶就变成什么了呢?变成了我们的二,为什么呢?统计了吗?相同的K1和一做聚合,不就一加一等于二吗?那么盖LA1保持不变,我们Spark它保持不变,那么你最后的结果不就是开我们的二,然后SKYLA1,然后呢,我们的SPARK1。这个不就是我们最终。
08:53
的结果吗?好了,同学们回过头来,咱们观察一下,这种方式跟前面的图形是不是大同小异啊,比方说我来个A啊,过来个A,然后这个A再往这里面放,对不对?放完了以后我们再过来一个我们的B,然后呢,B再给它挪到这儿来,我们这儿是不保留数据的啊,咱们只是为了给大家演示,所以来拷贝,拷贝以后有个B吧,然后呢,同样道理,我们这边来干嘛呢?写个C,然后这个C再复制放到这里面来,放到这里面来以后是不是应该组合成一个字符放到缓冲区里面,所以是不是就变成了我们的中文的中字啊,所以说你会发现呢,跟我们这是不是大同小异啊,所以说RDD的实现原理跟IO的实现原理是一回事,那么我们这里就做一个总结啊,咱们来。
09:41
我们来说一下咱们的RDD,它的这个数据处理啊,我们的方式它类似于我们的这个IO啊,咱们叫IO流,所以啊,它也有啊,也有我们的什么啊,咱们叫做装饰者哎,设计模式它也是有的,诶老师那是不是就一回事啊,其实还不见得,比方说咱们举个例子,我们的这个IO流当中,我们说过了,你光去new对象的时候,并不会真正触发文件数据的读取吧,我们这儿也是一样的,你前面你不管怎么作,大家看一下我们的代码,我不管前面做了什么样的操作,它会真正的去读取数据吗?不会,他只有在我们的collect真正要用到数据的时候,它才会读取数据,诶,是这个概念啊。所以我们现在呢,给大家说一下,就是我们RDD数据啊,它只有在我们调用啊,咱们的collect啊,咱们方法时,它才会。
10:41
啊,真正执行,真正执行我们的业务逻辑操作,所以前面呢,咱们之前啊,之前的封装它全部。它都是功能的扩展啊,咱们叫做功能的扩展,所以这个事情我们要给他分析清楚了,你要搞明白啊,哎,老师呢,还有没有别的一些区别呢?还有咱们之前大家还记得吗?咱们这边有个叫做buffer,叫缓冲区吧,这就说明在IO当中啊,它其实是可以临时的把数据存储一下的,但是我们RDD里面你会发现它里面是不存数据的,当你的数据来了,就直接往下走,再往下走,再往下走,所以说中间是不存储任何数据的,诶这个事儿同学们要明白啊,所以来箭头,诶,咱们的箭头放过来好了,复制一下,诶再给它放过来,然后再来复制,再给他放过来。
11:38
所以啊,数据是原封不动往下流转,它是不会存储数据的啊,所以咱们再来说一下咱们RDD的数据呢,RDD它是什么呢?它是来写上,它是不保存数据啊,不保存数据的,但是我们的IO它可以临时啊保存一部分数据一咱们叫部分数据,所以啊,对于这个来讲,他们其实很像,但是又有区别,但是呢,像的地方很多嘛,你把这个图形你理解一下我们RDD的基本原理,咱们就明白了,它就是把最小的计算单元通过组合,让它的功能越来越强大,懂吗?同学们就是这个意思了。
我来说两句