温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
好了,同学们,我们接下来给大家讲一下,咱们的这个算子叫aggregate,这个算子我怎么感觉好像咱们之前给大家讲过类似的,对吧?在讲那个转换算子的时候,有一个叫aggregate by key啊,它里面需要传一个初始值,然后呢,两个计算规则,一个叫分区内,一个叫分区间,对吧?那么你会发现呢,在咱们这里的aggregate其实也差不多,它有一个初始值,有一个分区内的计算规则,还有一个分区间的计算规则,对吧?那好,我们来一块看一看,那这里呢,我们来拷贝啊,然后写上我们的零三,嗯。点击OK啊呃,把这个里面的它咱们给它变一变,把里面的这些东西我们全都不要啊。好了,那我们的RDD点我们叫aggregate,那这个时候呢,有一个初始值,然后呢,有一分区内计算规则,还有一个分区间计算规则,那这个时候你会发现它会得到一个具体的结果。
01:04
诶好了,其实这个呢就不太一样了,因为咱们之前那个aggregate by key啊,它其实并不能够直接得到结果,它是转换成了一个新的RDD,对不对,但是咱们接下来讲的这个aggregate这个算子啊,它是一个行动算子,它会直接触发作业的执行,对吧?那这样的话就直接出结果了,那这个结果呢,我们拿过来啊,来咱们print,咱们叫,那么咱们开始运行啊,嗯。运行以后咱们可以分析分析啊,这个叫初始值,它会在我们的每个分区当中来参与运算,那么我们是两两相加分区之内,那么我们的零加上一加上二是三,那么另外的一个分区呢,是零加三加四,那么是七三加七,那不就是分区间计算,不就结果应该是十吗?所以啊,这个没有任何问题啊,我们之前那个aggregate by key啊,它有一个相同key的概念,那我们这个你会感觉更加通用一些,为什么呢?因为它不需要考虑数据的类型对不对啊,你不需要非得是一个特殊的键值类型才能用,我们只要是普通数据它都能用,还是非常方便的啊。那么我们的这个aggregate backy呢,其实我们说跟他呢感觉很像,但是其实又有区别,区别在哪呢?怎们看来我写个十。
02:23
写个十的话,那按理说咱们这个地方是分区内计算的话,十加一加二,大家看是不是应该是13呢?然后呢,我们的十加三加四,诶那我这里其实写错了,应该写个二啊,写个二,那这样的话呢,我们这边大家看一下我们的这个十啊,啊大家看一下啊来它应该是加三加四,那么就17,所以它应该加上什么我们的17对吧?那你加17的话,结果是不应该是30呀,所以它的结果呢,应该是我们的30啊,咱们来看一看,跟我们预想的是否是一样的。看一看啊,这个结果上应该是13加17啊,等于30,但是其实在运行之后,你会发现结果跟咱们预想的其实不一样,哪不一样呢?你看实际的结果是事实,而我们预想的结果是30,那问题到底出现在哪儿呢?这就是他们的区别了啊,这里我们来说一下咱们的aggregate啊,他们咱们的by key啊,By key它的那个初始值啊,它只会咱们叫参与我们的分区内啊,咱们叫分区内计算。
03:30
而我们这个叫aggregate呢,诶就有点不太一样了,为什么呢?因为它的那个初始值,它不仅仅会参与我们的分区内计算,所以他会参与分区内计算,并且啊并且,嗯,并且他会什么呢?参与我们的分区间啊,咱们的计算,所以呢,那么就意味着我们的十在分区内,一二这个分区,那么十加一二是13,那么在第二个分区,十加上三四是17,没问题,但是分区间它这个初始值也会起作用,所以十加上13,然后再加上17,这就是它事实的来历啊,所以这个呢,稍微的区分一下同学们,不光是数据类型,不光是我们的这个初始值啊,它的这个运算规则咱们也要搞明白好不好,同学们,嗯,OK。
我来说两句