00:00
好了同学们,我们接下来我们一块儿来看一看RDD呢,如何在我们程序当中使用,那首先我们先来说一下咱们RDD的创建,RDD的创建呢,我们的有四种方式,第一种呢,是从我们集合中创建,其实啊,说白了是从把我们的RD建出来,对吧,因为集合嘛,呃,第二种方式呢,是从我们的外部的存储系统当中来创建RD,那么这里的外部存储呢,指的就是文件啊,从文件中把数据读取过来,然后还有呢,是从其他的RDD中创建,还有一个叫直接创建啊,就是你自己写个new的方式来创建,这两种方式呀,第三种,第四种我们用的自己写的不多啊,这个一般都是在我们框架当中使用,那咱们用的比较多呢,其实基本上还是我们的前两种,第一种从内存中创建,第二种从我们的文件中创建啊,咱们就依次的来看一看,首先我们来看第一个啊,从我们的。
01:00
集合中来创建RDD,那怎么创建呢?我们这里给大家介绍一下来。呃,首先我们在这里呢,来它属于一种我们的基本操作了啊,所以我们这里呢,来我们叫做new啊,咱们叫做创建咱们的RDD,好,然后点击OK,那这里呢,我们给它来new,我们写上一个叫create啊,就是创建RDD啊,咱们写上啊,咱们叫做build啊,然后在这里呢,我们new创建一个skyla class,我们写上咱们叫做来我们的SPARK01,诶,我们写上咱们叫RDD,咱们叫create,或者别叫create了,咱们叫memory啊,就从内存中把我们的RDD创建出来啊,然后写上object,点击OK。好了,在里面我们写上我们的men啊,咱们的men,那这里首先跟前面是一样的,首先第一个先把环境准备好啊,咱们叫做什么呢?叫准备环境啊环境,然后呢,来写个todo,来我们写上叫创建啊,咱们叫创建RDD,好,我们写上第三个todo,当你创建完成以后,你就要将数据采集过来,采集过来以后要关闭环境,或者叫停止环境都可以是吧?哎,咱们叫关闭我们的环境啊,来咱们叫关闭环境。
02:23
好了,那首先第一个啊,咱们再来写一遍,我们第一个呢,写上一个它叫做Spark k,那这里呢,我们写上叫new,叫Spark com,好,然后呢,导一下我们的这个类,再来点我们叫site,我们的master,这个是我们集群的环境,我们默认情况下,为了做测试方便,我们就叫local,写上一个中括号星,这个中括号星表示什么含义呢?它表述的是你当前本机的那个核数是多少,比方说你八核,OK,我们这里会采用八个线程来模拟它的真实运行场景啊,所以这个星表示的是你当前系统的最大可用核数,是这么个概念,诶老师,那如果我要不写呢,你不写的话,它就是用单线程来模拟单核啊,是这样的一种情况啊,咱们一般情况写星是可以的,然后接下来我们点,我们叫site,咱们叫APP name我们写上啊,咱们就叫RDD。
03:23
就是它了,那么所谓的APP内呢,就是因为我当前写的程序其实就是一个应用程序,我给这个应用程序呢,起个名称就叫RDD就可以了,好,那么我们的配置有了,接下来构建我们上下文的环境对象,咱们简称叫SC,等于new叫Spark啊,咱们的context,那么我们把那个Spark呢,给它传进去,上下文环境对象就准备好了,接下来我们的SC在我们这边,我们需要点给它来一个我们的stop,停止咱们的连接,关闭环境啊,行了,那这个不说了,咱们都做过了啊,接下来我们要创建RDD了,那么我们创建RD呢,我们这里写上咱们是从什么呢?来从我们内存中,我们叫做创建我们的RDD,说的简单点,把内存当中的数据当成咱们处理的数据源啊,所以来写上。将我们内存中我们集合的数据作为。
04:23
诶,我们处理的啊,处理的数据源。啊,就是这样的,你的数据的来源呢,就来自于我们内存中的集合,然后处理的过程当中,我们需要传给不同的exor来执行,那我现在来写上吧,SC这个里面会有一个方法,这个方法呢,你写个P就出来了,叫paraless,然后呢,在里面大家会发现它里面是需要传一个叫s seq的,而后面这个参数呢,是有一个我们的默认值和隐示参数的,隐示参数你可以不传默认值,你也可以不用传,那么你只要传一个集合就可以了,所以我在前面呢,给他准备一个集合,这个集合他说了SEQ,其实呀,我们SQ它的一些具体的类也是可以用的,来,我们写上咱们叫s seq等于SQ,然后写上一个int啊,然后写上一个一。
05:17
B1234,你这么写没有任何的问题,然后把SEQ给它放过来,放过来以后这个方法呢,来我们点一下点,然后叫VAR回车,回车以后,那这个时候呢,我们就叫RDD就可以了,大家会发现这个就是RDD,它就以前没有,现在给它构建出来,那么我们的数据就跟它产生关系。好了,那你的这个RDD我们前面讲过了,我们这里也不做别的操作,对不对,我们只需要去演示一下就可以了,所以我们直接来,我们写上一个叫点,我们叫collect,只有触发我们的collect的方法,它会执行咱们的应用程序,那这样的话会得到结果,咱们给它来for each啊,For each呢,我们这里呢,给它print就可以了啊。
06:08
好了,那我现在呢,把这个代码呢,算是写完了啊,来运行一下看一看,在控制台上咱们会打印出我们的1234,我这里啊,并没有做复杂的操作,只要你把RDD构建出来就可以啊,这是我们创建的方式,为什么呢?我们讲过了,RDD呢,就是一个嗯,计算功能的封装,我们现在就是一个简单的一个读取,没有别的,所以啊,一个RDD其实就够了。好了,诶,大家会发现1234不就出来了吗?它就是我们内存当中的数据,1234,它是我们处理的数据源呢,诶,那我们回过头来看看这个方法,这个方法呢,叫做paraly,可是同学们这个是啥意思呀?那我们这里呢,给大家解释一下,这个呢,我们来说一下这个呢,就表示并行的意思。
07:00
它就表述的是叫并行啊,咱们叫并行,诶这个咱们前面讲那个概念的时候,恰恰提到过一个叫并行度的概念,当我们有两个CPU核的时候,那么你的并行度应该是二,为什么呢?因为你真正同时执行的任务呢,只有两个,如果你的这个嗯,核数有两个,但是你的任务呢,有四个的话,我们记住了,不是说你有四个任务,并行度就为四,不是的,那你四个任务,那么你只能够同时执行两个,对吧,你其他的就叫并发了,为什么呢?它是不可能同时执行的嘛,所以啊,那个并行的概念你要分清楚,诶,那这个不好记呀,对吧?Paraless这个方法名不好记,而且理解起来也不是很容易,叫并行对不对?诶怎么就并行了呢?不好理解,所以这个方法呀,就感觉很奇怪,为什么呢,第一个不好记,第二个呢,他的这个语境啊,不好理解,所以在这种情况下,Spark的作者呢,诶他也提供了另外。
08:00
一个方法,同学们看啊,来把这个注掉,注掉以后它有另外一个方法叫SC,然后点我们叫什么呢?叫make r DD,诶大家会发现你看这个名字是不是就很好明白了,建名字意,我一看到他哦,Make制作生成,那么生成RDD不就恰恰是我们想用的吗?那既然是我们想用的情况下,大家想一想,那我们怎么去用它呢?应该差不多吧,所以来咱们提示一下CTRLP快捷键,大家会发现我们这里跟刚才差不多,也是需要一个序列,然后呢,一个我们的默认值的参数,还有一个隐式转换的参数,后面两个可以不用传啊,不用传,我们只需要传第一个就行了,那么第一个不就恰恰是个序列吗?所以我们拷贝,拷贝完成以后来吧,点VAR回车,回车以后你会发现跟我们这个是完全相同的,为什么?因为它处理的数据的类型是一。
09:00
啊,我们要处理什么样的数据啊,它的类型是什么呢?在RTD的后面就会有一个泛型表述的是你要处理的数据的类型,那所以啊,这个跟我们刚才这个呢大同小异,咱们再来运行一下,看一看咱们的结果好吧。好了,同学们,结果出来了,哎,但有同学说,老师啊,这两个方法既然是两个不同的方法,那我们是不是要分别记忆呢?其实也不用,为什么呢?因为啊,我们来观察一下,来同学们看。我们观察的时候呢,我们就想看一看它俩有啥区别,那么我们怎么观察呢?从它的源码中观察,我们点一下parael,点点完以后同学们会发现在这个地方它会产生一个我们的RDD,那我回过头来,我们再来看这个叫make r DD,我们再来点它点点完以后同学们有没有发现?我们的make r d的底其实调用的就是para方,而且参数都没变,你看参数给我们的参数给他,就等同于把我们的参数原封不动就给他了,对吗?所以啊,其实这个方法你可以理解为就是它的简化版本,让它更容易理解,所以啊,在这种情况下,我们说一下咱们的make r DD的这个方法怎么了呢?它在底层实现时。
10:26
它其实它就是调用了我们对象啊,咱们叫做对象或者叫RDD对象,RDD对象的这个paraly方法。所以它俩没有任何的区别,只不过这个方法名啊不好理解,它的含义啊,不是很好理解,怎么办?用一个更好理解的方法来代替就可以了啊,所以这个呢,咱们就掉了,咱们以后要用的话,咱们也就用什么make r DD就够了,那么有了它以后,那么第一个RDD出来了,你再做别的操作不也就OK了吗?对不对,同学们,诶,就是这样啊。
我来说两句