00:00
啊,Spark circle呢,它是为了简化RD的开发,其实它是要把RD做一套封装,当我们写语句的时候呢,它会自动的把装好的模型转换成RDD是这么一种情况,那么这个模型当中啊,就有两个,一个叫data frame,一个叫做data set,那我们接下来分别给大家介绍一下,首先第一个data frame什么?那么在SPA当中,Data frame是一种以RD为基础的分布数据,它类似于。传统数据库当中的R维表格,那么data frame和RDD的主要区别呢,就在于我们的RDD,它只关心的是我们的数据,比方说我给你个一,我给你个二,你只关心是1234,你不关心他代表什么意思啊,你是ID啊,还是年龄啊,还是什么什么意思呀,不知道,我也不关心,我只关心我得到数据源呢,是1234,但是我们的data frame就不是了,他更关心的是我们数据的结构,比方说你给我的1234,诶,我一看,哦,这个个不是数据库的组件吗?对吧,组件为一,组件为二,组件为三,组件为四,它是型的,所以这种数据的结构信息我们是data frame比较的,但是R其实就不怎么对,就是这个意。
01:20
然后呢,我们就看这张图,这张图形当中就体现了它们的区别,比方说我们的RD,它里面会有一个泛,咱们里面写了个,那么就意味着咱们的R现是就是一个个,可他其实不关心这个person里面有什么啊,比方说你这里什么么ID属性啊,Name属性啊,这些他根本就不关心,他只要知道我拿到的是一个一个的portion就够了,他就干这个事情。而我们的data frame,它更像一个二维的表格,它关心的是你的数据当中的每一个数据所代表的含义,比方说你的第一个数据啊,咱们叫name,第二个数据呢叫age,第三个数据叫hat,那么你的第一个数据name呢,它是我们字符串类型的,而第二个数据age年龄它是我的整型的,而我们的hat它表述的是我们类型的,那这样的话就属于一些跟数据相关的数据了,这个咱们称之为叫原数据,对吗?诶,就是这样,所以data呢,会保存这种原数据的信息。那么然后下面说了,我们的data frame呢,会为数据提供一些数据的视图,它可以在数据库当中当成一张表来,没有问题。然后呢,Data frame呢,是执行呢,什么执行啊,就是说你得触发它的执行,否则它不执行,可是呢,这种方式呢,它的性能要比RD高,诶那你可能会问了说老师呀,我们的这个data frame它是基于RD的。
02:52
可能比RD还高呢,它这里面所谓的高是因为它底层执行一些优的这种啊,也就味着会根据实际的使情况来优化它的RDD的调用方式,那举个最简单的例子,比方说我们两个RDD的数据源,我们想做一个连接,连接之后对数据进行过滤,那这个时候我们的join操作呀,它就有可能会有笛卡乘级,而且在数据量大的情况下,有S的时候,性能会非常的差,那这时候你当我做教育的时候,就有可能导致数据根本就跑不通了,为什么呢?诶我们的资源不够。
03:29
那这时候你根本就没办法往下做,但是如果我们调整一下的话,比方说我先做field,把那些不合法的数据先给它过滤掉,那么在这种情况下,我们剩下的数据就少了很多,那我再做我们的教育的话,数据量少了,那是不是所占的资源就少了,那么我的资源就能够支撑我们的计算,这不挺好吗?所以这种优化可能你自己写代码你可能考虑不到,但是我们的框架的底层就帮你考虑到了,这就是它提升性能的一个方案。
04:03
好了,这是我们的Spark当中的data frame。接下来我们再往下看,下面呢叫data set是什么?它也是分布式数据集,但是它是我们Spark1.6版本之后所增加的一个新的抽象,为什么呀,这个就比咱们学Java的时候,你写个,然后呢,你去通过Q语句来问买circleql中的表的数据,那么大家想一想,当你写完一个查询语句之后,你返回了结果,这个结果你用起来应该不方便,什么意思啊?比方说大家想想你是不是应该是我们的,这是我们的DC当中的查询结果,对不对?哎,这么写,然后呢,RS等于我们的prepare statement,然后点我们叫做cute,对吧,我们叫做query,然后在这里面写个什么circle吧,对不对,写个叉叉叉叉叉好了。那么在这种情况下,大家想一想,你要想去做我们的什么数据查询的话,你是不是应该干嘛呀,哎,往下来做呀,我们应该写上一个什么。
05:08
看到叫RS点我们的next吧,哎,Next判断有没有数据,然后呢,我们的R点是不是get来取它的数据啊,但这个时候你来取的时候是不是根据它的顺序啊,比方说第一列,第二列,第三列,那这样的话有的时候不准确,为什么?因为同样的circle文,大家看一下select我们的ID,我们from我们的U啊,比方说我们叫ID呀,Name呀。大家看,这么写没问题吧?但是你的所有课文如果变换了一下顺序,我问同学们。你这么写的话,是不是导致你这也得跟着练,为什么?因为你的这个顺序跟这个SQ语句的顺序是不是一样的,所以有的时候啊,用起来不方便,并不是说写起来不方便,而是当你对结果处理的时候,它不方便怎么办?那么我们Spark呀,它在这个情况下又对我们的state frame做了一个简单的优化,就是把类型加进去。
06:08
什么意思啊,我把一行的数据当成一个对象来用,那这样的话,对象点属性,它就不会出现咱们刚才这种情况了,还得靠顺序来记啊,所以这种方式呢,其实非常不错的,所以啊,Data set其实是我们以后啊经常会使用到的一个类啊,一个模块。好了,这个呢,我们说一下就行了,因为它是一个新的一个扩展,它也是一个新的数据抽象,这个我们以后用起来,咱们就知道怎么回事了,这个文字性的描述咱们慢慢去理解,咱们后面再讲啊,现在呢,咱们先有个大概的了解就可以啊。
我来说两句