00:00
我们刚才啊,给大家讲了一下咱们的这个,嗯,分区的数量的问题,从集合中创建我们的RDD,然后分区的数量我们也已经知道了,可是呀。我们这个数据如果不多,但你分区的数量比较多,怎么办呢?比方说同学们看啊,我现在就是1234,我现在有五个分区,那好像如果每个分区一条数据的话也不够啊,那这个时候就会有点问题了,就是我们的数据是怎么放到分区里面的。那比方说我1234我有两个分区,那这个放的话,它是一二放一个分区,三四放一个分区,还是轮巡一放一个分区,二放一个分区,三放和一放一块儿,四和三放一块儿呢?所以啊,我现在有点分不清了,那我们现在呢,给大家稍微的看一看,就是我们来判断一下咱们的这个集合中数据它的存储是怎么存的啊,怎么存在我们分区当中的,所以来。
01:05
咱们现在呢,给大家打开啊,咱们这里来打开来拷贝,拷贝以后呢,我写上一个咱们叫做它,诶写上一个一点击OK,点击OK以后放过来,然后呢,我们现在呢,这个咱们就不要了啊,这个咱就不要了,OK,把这个去掉,去掉以后这些文字性的描述咱们讲过了,也就不再要了啊把这个去掉怎么简单怎么来吧,然后呢,我在这儿给它写个二,你写个二以后就表述的是现在的数据源的数据,我要放在两个分区当中,对不对,但是我说了,我关心的是它的数据是怎么存放的,那比方说来咱们看一看我现在啊,有可能有这样的一种情况,什么情况呢?我的一和二在一个当中,然后呢,我的三和四在一个分区当中,对不对,诶还有一种可能,比方说,诶,大家看一下我们的两个分区,我先把一放到这里,把二放到这里,然后呢,再回过头来把那个三放到这里,再把这个四放到这里,这也是有可能的呀,轮询吗?
02:06
所以我现在不知道,那么我们现在来执行一下啊,咱们观察一下啊,来我们现在运行,运行之后我们来观察一下咱们现在的数据的存放啊,是如何存放的啊,如果正确的执行的话,咱们在这边会产生一个叫output的文件目录,咱们打开,打开之后有两个分区,我要看一看了,咱们打开打开以后大家有没有发现一和二在一个我们的分区当中,对不对,然后呢,三和四,那就不用说了,在另外一个分区当中了,对不对,诶也是没有问题的,所以呀,我们的,诶这个是不对的。咱们现在啊,应该是这个样子,诶老师,那你这个是一二三四两个分区,你这是能够平均分的呀,能整除的呀,那如果现在假设不是我们的什么,我们的这个两个分区是三个分区怎么办?什么意思呢?把这个注掉,注掉以后如果是三个分区的话,那你有点麻烦了,麻烦在哪了呢?哎,我们现在是我们的三个分区,那现在你要是一二,你是三,你是我们的四对不对?
03:12
那怎么可能是这样的呢?我们的1234空。好像也不是,那如果均分的话,好像三个分区应该每人分一个吧,那如果每人分一个的话,那出现是这样子的对不对?那好,那问题来了,你那个四怎么办?对不对,你那个是怎么办。难道是放这儿还是跟最后一个放一块儿了,不知道,所以啊,我们现在不知道会怎么处理的,所以啊,他可能啊,比方说就是轮询对不对,那有没有可能是放最后呢?有没有可能放中间呢?我们都不知道啊,咱们都不知道,所以我们拆是没有用的吗?咱们拆是没有用的,所以啊我们这里呢,需要咱们看看到底发生了什么事情啊,所以把它照样呢,给它删除掉啊删除掉好,那我们现在给它运行,嗯。运行以后看结果啊,看一看我们到底数据是如何存放在不同的分区当中的,有没有什么规律可循,咱们可以找一下啊,好,已经完成了,完成之后打开,打开之后没问题,确实是三个分区,我来看第一个打开,诶是一,那好我们再来看我们第二个分区。
04:19
它是二,然后再来看我们第三个分区三和四,所以啊,它是这个地方啊,它是它了,那这个时候我们就发现好像也没有什么规律,对不对,那行,我们再给大家试一试,把这个做掉,再看看能不能找到规律啊,那我们现在干嘛呢?写上一个五。12345,那么这个时候我们来看一个啊,它的数据是什么样子的来看,首先如果是平均分的话,那么我们是五个除以三肯定除不尽嘛,对不对,123,但是还剩下四和五呢,那是不是意味着它的这个地方就是个四,他的这个地方是个五呢?
05:01
对不对,哎,或者呢,它的这个地方是一个五,这个地方是一个四呢,对不对,我好像诶这个就不太清楚了,对不对,所以啊,我们现在不好判断了,因为我怀疑啊,是不是一和四,然后二和五三没有,所以啊我怀疑是不是我们这种情况。有没有可能呢?不知道,咱们来验证一下啊,来把这个删掉,Delete,所以啊,我们的目的很简单,就是想找规律啊,来运行看一看,诶,结果出来了,打开,打开以后还是三个分区,这是对的,看看我们这两种方式哪个是正确的啊来我们打开零。好像诶两个都不太对呀,咱们这两个明显都不对,对不对,所以把这个我们去掉了,然后呢,这个地方是没有的,那没有的话,那你这个第二个分区呢,点开。诶二和三,那所以呢,诶在这儿呢,那不用说了,那你最后一个分区肯定是我们的四和五嘛,所以说我们这个地方去掉它应该是我们的四和五,所以啊,这个数据怎么是这样分配的呢?我就感觉不是很好理解,那怎么办呀,老师,我现在就想看看我们数据是如何分配到不同分区的,我该怎么办,告诉大家看源码啊看源码。
06:15
源码啊,是我们理解我们整个思路流程的最好的办法,所以我们来点一下,点点完以后大家会发现在这个地方我们给他传了个三,就不用管它了,然后他走的是什么?Para less,这个是不是三,这个是不是12345那个集合,没问题吧,我们再来往下点,点完以后大家会发现这边会有一个叫什么呢?叫做我们的RDD的对象,对不对?我们再往下点,点完以后它里面就有一个方法,这个方法叫get part,还记得吗?我们讲过所有的RDD都会有一分区的列表,就意味着每个数据在哪个分区,其实在这个地方是定下来的吧。
07:00
对吧,你就定下来了,获取分区嘛,所以大家往下看,这个地方就有个RDD点叫s less啊给它切分的意思是吧,把切分的结果呢,变成R,然后再进行我们的操作,所以啊,从这个角度来讲的话,大家看一下这有一个切分的意思,把我们的数据咱们拿过来,把这个数量拿过去,分区数量嘛,一个是12345,一个是那个三,诶我现在看看它在干嘛,点一下点点完以后,首先它会判断判断什么呢?你的那个分区数量是不是小于一,如果小于一的话会报错,这个咱不说了,对吧?接着往下这边有个叫predictions,可是它是一个函数啊。啊,它是个函数,这个函数我们在没有调用的时候是不可能执行它的,所以我们这里先不管它,咱们接着往下,下面是不是叫SEQ,这个SQ就是你传过来的数据吧,你传过来的数据大家想一想,这边就开始做什么模式匹配。
08:02
那么模式匹配的话,它会匹配什么呢?你的类型叫做rangench,叫做范围类型,那咱们明显不是嘛,但这个历史对不对,所以不可能,然后这个地方呢,也在匹配那个叫range对吧?范围,那我们明显也不是嘛,那么都不是的情况下,是应该走这个叫case下划线了,这个case下划线就是我们接来要执行的功能,那么它首先会把咱们的那个序列集合变成数组吧,然后会调用之前的那个叫做pros,然后呢,它会把当前数组的长度传过去,把分区的数量传过去,对不对?所以同学们看一下来我们现在干嘛呢?我们传了一个12345,它的长度是五,然后把那个三传进去了,这是那个number啊,这个呢是那个长度咱们的lesss,而这个呢,是我们的那个什么啊,分区的数量,咱们叫做number。好了,那我现在呢,就已经知道了,他要走这个叫位置叫position,然后呢,当你取到了数据之后,它这边会有个map,这个map呢,会有一个切分数组的操作。
09:08
所以呀,你的这个数据,阿瑞数组的数据该如何划分,其实就取决于projection,所以啊,咱们来看看啊,咱们点一下,点点完以后大家会发现这个就是我的长度,咱们刚才说了长度为五,然后呢,我们这里的number less是分区的数量是三,大家看它里面的逻辑是什么。它里面的逻辑是不是0UNTIL number line,你这个是三吧,零到三,但是不包含三,对不对,它用的是一个until,这是一个范围啊,这个范围呢,它迭代,迭代以后map就是把咱们的大家看一下来,你不是012吗?为什么呢?不包括三吗?你不包括三的话,把每个值进行了下面的操作,到最后会返回一个tale,等同于把一个I,这个I呢,其实就是我们的012。
10:02
把零,把一把二变成我们的tale,就是这个意思对不对?好,那我看怎么变的,来先给个零,你给他个零以后大家看I是零了,那么这个时候呢,它就计算咱们的start就是起始位置,那么我们的零,零乘以任何数是零,除以任何数还是零,所以它的start一定是个零,所以大家看一下它的这个一定是个零啊。然后呢,我们接着呢,再往下看,往下看是我们的I加一,那么零加一不就是一吗?一乘以五再除以三,那不还是一嘛,记住它是没有小数的啊,所以说它的这个N的就是一,哎,就是它了,好,那我们现在接着往下啊,因为已经做完了嘛,该下一个了,如果是一的话怎么办?对吧,大家看它如果是一的话,那么好,一乘以五再除以三不还是一吗?所以这个是不变的,来接着。
11:02
一加上一是二,二乘以五是多少?我们的十十除以三不还是三吗?所以啊回去啊回去在这儿它就是三了啊OK,再来往下好,这地方应该是个二了,它如果是个二的情况下,同学们看一下,那么我们的二它乘以啊来乘以525得十十除以三,那么不还是三吗?所以它就变成了三,然后呢,接下来我们再来,我们刚才的这个地方是我们的二加一是三,三乘以五是15 15除以三,那就是五了,所以这个地方它就是五,所以我们在通过这个简单的算法之后,它形成了一个圆组的集合,对不对?它把这个圆组的集合它干嘛了呢?他就往下做了一个map,把你的元组的起始位置拿到,然后在数组当中做了一个切分的操作,这个切分就把你的起。
12:02
指和结束的位置传给他,我们点击它点,点完以后同学们来看一下啊,来。呃,我们这个地方我看看啊,来,嗯,点一下我想想啊,哎,算了,不点了吧,就看这吧,怎么看我们这个地方叫from啊,待会它也出来了啊,它也出来了,那我现在的这个地方好像,哎,算了,把它关掉吧,关掉以后大家看一下,我为什么不需要了呢?因为咱们看到这个名称呢,这个名称叫什么?叫until,就是我第二个那个值啊,叫第一个叫from,从哪开始。第二个表述的是不包含从哪到哪,但是不包含对不对,那所以从这个角度来讲的话,同学们看从零开始,但是不包含一,那是不是我们的数据的什么12345的话,那么零是不是就是它了,所以说这个结果就是我们的一,为什么呢?零是第一个嘛,然后呢,接下来我们再来干嘛呢?从一开始,从一开始的话就是二,然后呢,干嘛呢?诶我们说到这个三,但是不包含三。
13:04
0123不包含三,是不是就是二和三呢?所以说它就是二和三,就是这么来的,那好,同样道理,同学们我们再来,再来的话,那我们的这个地方是一个我们的三,哎,从三开始,0123从这开始,对不对,然后呢,到534有五吗?没有,那么到四就可以了,所以四和五,所以大家会发现是不是就是这样,这个跟我们前面给大家分析或者看到的结果是不是完全相同啊,123和四五,所以啊,如果我们通过源码来解释的话,就更加清晰了,因为之前呢,我们就看不懂它的数据是怎么存储的,不明白,但是有了源码以后,这块我相信大家没有问题,对不对?诶,这个需要大家去好好练习一下啊。
我来说两句