00:00
好,同学们,我们接下来来讲一下这个叫的啊,Distinct的是一个我们的去重的一个函数啊,那么这个函数啊,它其实可以把咱们数据当中重复的项目呢,给它去掉啊来。啊,这里呢,我们给它来关掉啊,咱们来拷贝,拷贝以后呢,我们写上啊,咱们叫做零九啊零九,然后呢,给他拿过来点击OK啊嗯,放到这里,嗯。然后呢,这个咱们都不要了啊,这是我们之前的那个simple,那我现在呢,把这个去掉,呃,我写上一二啊,然后呢,写上1234啊,然后再写个1234,那么大家会发现我现在其实在咱们当前的数据源当中有八条数据对不对,那好,这个时候你的RDD点我们叫做什么呢?叫distinct,那这个时候呢,我们再来点啊,VR咱们写上叫做RDD啊,咱们RDD吧,嗯,好,写完之后,那我这个时候呢,可以直接来了点,点了之后,那我现在直接collect,嗯,咱们的collect点我们的for each给它来一个print。
01:11
好,那我现在运行啊,运行以后看结果。那这个结果当中你会发现呢,它应该只剩下什么呢?我们的1234了,嗯,就是这样啊,诶老师这个功能很简单,那是不是就完事了呢?其实还不是,我们光这么看没问题,可是我想知道的是它的原理,它怎么去的冲。那比方说呀,咱们之前学盖的时候,大家想想学盖LA的时候,我们是不是有一个list啊,然后1122对不对,我们是不是点儿,我们也有一个叫distinct的呀,那它怎么去的重呢?记住啊,我说的是咱们的skyla集合,就是内存中的集合数据,它是怎么去的虫呢?所以我点一下,点完以后啊,同学们看啊,来咱们找一下,诶这个好像是没有对吧,咱们可以来操作一下,嗯。
02:06
然后呢,我们这里搜索一下,咱们在这里我们搜索一下,把这个呢拷贝,拷贝以后放过来啊放这边放过来以后呢,我们再去点一下,点完以后啊,咱们往下来看一看,看一看啊来往下走,往下走了以后,诶大家看怎么了,是不是有一个叫什么东西叫哈西site。那你哈希set这还说啥呢?你的数据结构当中,Set本来它里面的数据就不能重复,对不对,所以啊,它的底层当中用到了一个哈希set的结构,这是我们该LA的集合,它的的去重的方式,那我现在就想看一看,咱们RDD当中,我们去重的方式是不是也是这样,所以我们来点一下,点点完以后你再去点它,然后你往下看,你会发现好像它不太一样啊,它这里面所谓的这个不太一样啊,同学们看啊,我们在这个里面啊,他做了一些什么呢?我们的操作啊,做了我们的一个操作,那么这个操作呢,是在咱们的下面来做的,有一个叫做partitioner,这个partitioner咱们之前说过了,可能有值,可能没子,大家还记得吗?在咱们之前给大家讲咱们的这个,嗯,五大属性的时候,其中那个partitioner是有可能有有可能没有的,它是那个option吧,还记得吗?诶就是这样,那么。
03:27
我们说了默认情况下是个,那那么肯定就不满足这个条件吧,所以呢,往下看是不是应该是这个,那如果是这个的情况下,大家看一下干嘛呢?所以要记住这个逻辑就是我们当前的distinct的诶它的一个逻辑,好了,那这个逻辑我们会发现呢,其实咱们是给大家诶讲过这些方法的,比方说map,比方说reduce by key,比方说map是不是咱们都知道啊好,那我们现在一块儿给大家分析一下啊来。首先它这个地方怎么了?它这个地方是把咱们的每一个数据变成了一个tapple,这个tale变成了一个nu,所以说大家看一下,其实它变成什么了,是不是变成这个东西了,大家看啊,我们第一条变变成什么呢?变成这个样子,然后呢,再来我们写成一个什么呢?二写成一个三,写成一个四,所以呢,它就把每条数据就变成了我们的这个样子,对不对?好,然后呢,再来拷贝,拷贝以后放过来,那么是不是还是1234呀,所以把我们上面的数据源的数据呢,就变成了这个样子,然后怎么办了,然后是不是reduce by key,这个咱们之前说过,它会相同的key把V来做聚合,对不对?那么相同的K,比方说一和这个一是不是相同的K,所以它们俩是不是怎么了,就放一块儿了吧,诶放一块儿了,放一块以后怎么办,那么是不是两个value做聚合呀,所以这个时候是不是就是两个,那它在做聚合呀,它怎么聚的合同学们看。
04:57
它的聚合规则就是说我只看第一个,第二个我不管,能看懂吗?同学们,第一个是个none,第二个我不管,然后我只返回第一个,那是不是意味着它就变成了什么nu了,那如果有多个的话,大家想想那么多个的话,是不是还是再来一个,那么这个nu再跟它来做聚合,那么是不是还是呢?所以啊,最终他得到的结果是什么?
05:23
最终得到的结果是不是就是一这个K不变嘛,那么我们的value是不是就是那啊,所以说相同的K它就变成了这个样子,把三个或者两个这样的数据就变成了一个它。好,这是我们的reduce by key,然后呢,干嘛了?Map map,它不要第二个,它只要什么第一个,那所以它就变回到什么一,诶就是这样,所以最后的结果就是1234后面的就不存在了,对不对,所以啊,原理就是这么个原理啊,它并不是说在底层准备了一个什么数据结构啊,什么哈set之类的东西,不是它采用的是这种分布式的这种处理方式来实现咱们的驱虫啊。
我来说两句