00:00
好,同学们,这个BY啊,咱们给大家讲完之后啊,诶我们发现呢,其实如果你把咱们这个A当成一个word的话,你这个不就在等同于求它的word count嘛,对不对,它就是这样的,但是可能没那么准确啊,但是好像含义也差不多,对不对,所以啊,那么我们前面学了那么多的方法,那么这些方法它能不能做word count呢?对不对?所以啊,我们接下来给大家说一下,就是我们的word count啊,咱们到底有哪些算子可以帮助咱们实现好不好,同学们,所以我们回过头来,咱们到我们的word count这个位置啊,咱们现在看看,那我现在呢,就拷贝一下了,咱们拷贝咱们写上叫做什么呢?我们的三啊,咱们写上,嗯,这个三呢,我们写上我们的诶我们的E,诶别写1I写嗯,写个写个就写它吧,嗯,写个他啊,然后点击OK,嗯。好了,现在呢,我们准备呢,把这些东西呢,给大家去掉啊,给大家去掉,好,现在呢,我们来啊,咱们来,现在我们想要做什么呢?我们现在就要想告诉大家我们之前讲的那么多的方法,那么哪些方法可以帮助我们来来实现word count。
01:17
为什么呢?因为在我们工作当中,我们的某一个方法来实现咱们的world count可能不见得行,那我换一种方式也可能就行了,对不对?那到底换哪种方式呢?我们一个一个来看啊来,那我这里呢,咱们写上啊,咱们来,咱们叫DEF,嗯,咱们叫DF,然后呢,写上咱们叫做word count啊word count,嗯,他们写个一啊,表述的是我们的第一个啊,就是这样,然后把这个呢,我们放过来叫SC,诶放到这边来啊好了,然后呢,我们在这这记住啊,同学们,这是我们的第一个啊,把SC我们放进去,嗯。好了,放进去以后大家看一下啊,来这个呢,我们先给大家写上叫做点点了以后咱们给它来一个make r DD,然后写上一个list,这个list我们就写上一个啊,然后呢,写上一个我们的word啊或者叫吧,嗯,好,然后呢,我们写上一个,然后写上一个我们的Spark,嗯,行,那在这种情况下啊,记住啊,同学们,在我们的这种情况下,我们能不能实现word count呢?肯定没问题,干嘛呀,我来拆分一下,咱们叫做flight map,把我们的一行的字串给它split,诶,我们写上咱们叫做我们的空格,那这个时候你拿到的记住啊,你拿到的就是我们的单词了,哎,就是这样,那这个时候我们该如何进行我们的word count统计呢?很简单,相同的单词是不是怎么了?同学们是不是可以放一起啊,所以说呢,来,我们接着写,咱们叫words啊点。
02:52
我们叫group by,诶,相同的单词我放在一起的情况下,你给我的是单词,那么我就用单词来来做分组,那么分组以后点我们的VR回车,这个时候你拿到的不就是单词以及多个单词所形成的集合吗?所以呢,这是一个我们的group啊,分组的,然后呢,接下来大家看一下我们这时候是不是可以就可以转换了,转换的时候记住这个时候啊,其实我们可以这样,咱们叫map of values什么意思啊,我们的key保持不变,我们是不是可以把迭代器给它来变成它的点size呀,你这样的话我们是不是就简单了很多,那这样的话来我们写上点,我们叫做VAR回车,这个不就是word,它不就是count吗?所以这个就叫word count,诶好了,所以啊,咱们的这个group是可以实现咱们分组的转换聚合的,所以啊,它会实现咱们的这个。
03:52
和什么world count,记住啊,同学们,这个map values,它的核心功能不是用来做什么聚合的,它不是world count的核心算子,我们的group它才是啊,所以呢,这里来啊,嗯,好了,那如果你能想到是goodbye的话,那我相信咱们之前还有一个,大家想想象一下,是不是应该能够想得起来啊,应该是不是我们叫做什么,咱们叫group by key啊,对不对,毕竟是咱们学过的嘛,但是你group by key有个要求,什么要求啊,它必须得有K和V的类型吧,那所以来我们写上,嗯,咱们叫worse啊,然后来我们写上,诶,不对,写错了,咱们应该是worse,点我们的map,然后写个括号,下划线啊下划线,然后逗号一对不对,然后在这里呢,我们来写上,咱们叫word one,哎,Word one就是它。
04:43
那这样的话就有我们的K有V了,那么有K和V的话,那么这个时候是不是就可以BYK了呀,对不对,相同的单词就自动的放在一个组当中了吧,那么这个时候它的类型就有一些变化了,所以把这个我们去掉啊,嗯。
05:00
去掉以后点叫VAR回车,回车以后大家可以看到就变成了这个样子,咱们叫group,那么这个group大家可以发现,其实我们这个地方key保持不变,我们只需要对我们的它做操作是不是就够了,那你这么写了以后,我相信也是word count吧,所以啊,核心的方法是这个叫BYT,它要求的就是我们的数据应该有K类型,哎,这个他们能明白就行了,这是我们的第二种,对不对?那这种方式我们说了它有个问题,它的效率不高,为什么效率不高啊,因为我们说了这个是有个沙Le,而这个沙Le的数据量它如果非常多的话,性能肯定会受到影响,所以咱们当时给大家讲了另外一个性能比较高的一个分组聚合算值,咱们应该叫什么呢?叫reduce by key,然后两两相加,两两相加的话,大家想想其实直接就能出现结果了吧。
06:00
所以啊,其实最终就直接拿到了什么word count了,对不对,所以这个根本就不需要。所以啊,那咱们这个地方大家可以看到我们现在咱们就是我们的reduce by key,这是我们第三个能实现word count的算值了啊,这个咱们之前是学到过,对不对?好,我们再来拷贝。拷贝以后拿过来啊,拿过来,拿过来以后,那reduce by key,我们其实给大家讲了什么,是不是讲了我们的四个呀,很像的算子,还记得吗?有一个叫什么东西,叫angry g吧,咱们叫bey,它里面有个初始,还记得吗?有个初始值,这个初始值然后呢和分区内计算,还有一个叫分区间计算,是不是也可以啊,所以啊,这个咱们之前讲过,我相信这个能明白啊,反过来,嗯,好了,那么当我们的分区内和分区间的计算规则相同的时候,我们是不是可以干嘛呀?可以把这个简化成我们的叫for的白key,还有印象吗?同学们,然后这个就可以去掉一个了吧,诶,它就可以去掉一个了,所以啊,这是我们的第五个,然后把它拿过来。
07:15
拿过来以后接着往下啊,来拷贝,拷贝以后再往下,往下以后大家看一下我们的第六个,因为我们能想到for back key iggreg和reduce,还有一个叫做combine,对不对,咱们叫combine,这个combine稍微的它特殊了一些,为什么呢?是因为它这里面是需要传三个参数的,这三个参数的第一个它表述的是你的那个第一个值应该做什么,那咱们这其实什么都不用做对不对?诶你给我什么我就变成什么就行了,然后呢,我们后面这个应该是X和那个Y,这个X应该是一个int类型,那么我们要做的就是X加上Y对不对?好,再来我们的这个X int和那个Y,我们的int,然后呢,写上叫X加Y,你这么写就行了啊,所以呢,其实跟我们前面差不多,只不过因为咱们的这个第一个值的转换过程,我需要动态来识别,所以这个类型。
08:16
我们需要加上,但是我相信功能肯定没问题吧,所以啊,这是我们的什么,我们的六个常见的算子可以实现word count,那好,那我们再继续来,因为我们之前刚刚又讲了我们的什么,哎,我们的两个哪两个呢?来写个七,还记得吗?我们这里是不是有这么一个操作呀,来把这个去掉,嗯,我这个有个叫count,什么count by key。有印象吗?同学们,那这个抗的YT,其实它可以直接就得到咱们的这个来他。大家看一下这个是不是就是word,它是不是就那个count呀,为什么?因为你这个是word,它这个是一,那么我们相同的单词,它的数量是不是自动就被统计了,所以说咱们的这个其实就是word count就是它啊来放到这边来。
09:11
OK,这是我们的count by key,那好,还有还有啊,还有拿过来,还有拿过来的话,其实啊,我们说了,其实除了我们的这个以外,还有一个方法,这个方法叫做count by value,诶by value,那么这个value大家想想啊,记住啊,稍微的有点特别,为什么呢?因为它其实是不需要那个K,那就意味着只要有相同的单词,它会自动来统计它的数量,对不对,所以这个咱们可以不要,那你不要的话,这个呢就是它了,所以放过来,放过来以后我们点我们叫VAR回车,这个时候你会发现它是我们的word。它是不是就是我们的count呀,所以说这个呢,也叫做啊来咱们写上叫word count,嗯就得到了,所以啊,大家会发现在咱们当前的这个位置,我们有很多种方法来实现,没有问题啊,诶那这个说完了以后,那么我们再看看还有没有别的呢?其实还有别的啊。
10:14
咱们先停一下吧。
我来说两句