00:00
好,同学们,我们接下来来学我们的这个field啊,这个field我一看是不是又熟悉了,同学们是不是特别高兴,感觉怎么越学越简单了呢?啊,咱们学盖集合的时候,这些都学过吧啊,那么这个呢,是我们的field,它表示的是过滤,它根据我们的过滤的逻辑啊,将我们那些不需要的数据给它过滤掉啊,进行筛选嘛,对不对,留那些我们需要的数据就是OK的啊来咱们看一看,把这个呢关掉,嗯。好拷贝啊,拷贝以后呢,我们写上零七,然后呢,这边写上一个transform,嗯,点击OK,好放过来,放过来以后啊,这些东西我们暂时不要啊,暂时不要,那这个咱们也简单点吧,这个咱们也去掉吧,啊来咱们的RDD,它等于sc make r DD list啊咱们的1234好了,写下来以后,咱们就做一个非常简单的功能干嘛呢?就是我们把那个我们的基数留下来,把偶数我们不要,所以呢,咱们的规则就是这样的,RDD点我们叫做,那么这个field呢,就意味着我们把每个数据我判断一下,那么就是拿到number,那我判断以后干嘛呢?我想判断你的每个数据它是不是奇数还是偶数。
01:17
那我怎么知道你是奇数还是偶数啊?所以我们的number要模以二,如果它等于零,是不是就是我们的偶数了?但是我说了,我要保留奇数的话,那是不是就不能等于零啊,所以就不等于零,那不等于零这个数据我就留下来了啊,如果你等于零我就不要啊,所以F就起到了一个这样的作用,所以点我们叫VAR回车,回车以后,那么我们就写上了叫field。好,然后呢,RDD拿过来。拿过来以后,我们这里呢,写上啊咱们的collect,然后点我们的for it啊,咱们的print好了,那我现在呢,给它来执行一下这些东西啊,其实都不难啊,为什么呢?因为都是跟计算相关嘛,计算相关的话,过滤其实基本的逻辑都差不多啊,只要规则我们能够明白,这个过滤的功能啊,我们18UG帮你实现就可以了,所以大家看一下我们的基数现在已经出来了啊嗯,好,回过头来他说了。
02:19
呃,将数据根据指定的规则进行筛选过滤,符合规则的数据保留,不符合规则的数据丢弃,当我们的数据进行筛选过滤之后,分区不变,但是分区内的数据可能不均衡,生产环境下是可能会出现数据倾斜的,哎,那这句话是什么意思呢?咱们举个例子啊,同学们比方说咱们这咱们假设现在呢,有两个分区,两个分区当中这个有1000条啊,默认情况下平均分嘛,这边也有1000条,可是呢,你的规则当中啊,它的计算是对每个分区来做计算的,还记得吗?我们的计算逻辑是对每个分区来做计算的,那么这样的话,这个1000会被过滤,它过滤,比方说诶剩下990条对吧?诶,比方说啊,而这个1000条数据干嘛呢?就剩下我们十条了,那么大家想一想,这两个分区的数据是不是就差的很多了啊,你这个量级都不一样了,这个是什么呢?有摆了快1000。
03:19
了,而这个还不到什么,还不到,也就刚刚过两位数,所以就会感觉啊,他们差的很多,对不对,那这样的话数据就不均衡,那不均衡的话,我们一般可以理解为叫做倾斜,但是这个倾斜呀,那你要看它的这个,嗯,差值什么意思呢?像九百九和十比肯定差的很多,但是如果呢,你说了什么一个亿是吧,一个亿,然后呢,990,然后这是一个亿十,你会感觉诶差的不多。所以啊,他们其实没有一个绝对的多少的问题,只是说你的一种感觉对吧?啊,这个叫数据倾斜,所以啊,这个确实是存在问题的啊,这个数据倾斜的事儿呢,我们后面也会详细的来讲,咱们现在呢,先放一放,咱们就知道会产生这种现象就可以了啊然后呢,后面呢,有一个小功能啊,这个小功能说了,我们的服务器日志数据中获取2015年5月17日的请求路径,就意味着那些不是2015年5月17日的呢,我们就是吗?不要了,那好,这个小功能呢,我们也给大家来演示一下。
04:23
把这个关掉,然后写上咱们的test好,然后呢,拿过来点击OK,放过来啊,过来以后来把咱们的这个我们的数据先给他准备好。呃,准备好的话,这个咱不要了,嗯,好,然后呢,RD点我们的map跟之前一样,也是我们的,然后呢,给它分解一下,咱们的date是等于点我们的split,然后呢加个空格啊,加空格以后它有要求了啊,它的要求就是我们说了要把那个时间拿到,所以呢,我们再去找一下时间,再确定一下啊。
05:00
嗯,IP地址啊,用户ID,我们的session ID,那这个是时间0123啊,把那个三先给它拿过来啊,所以我们的这边啊,应该是一个time,它应该等于date式啊,给他一个我们的三,诶这么写就可以了,那这么写完了以后,但是他有要求,他什么要求呢?他说了我们要获取2015年5月17日的,就意味着别的我不要。那别的不要,那就简单了呀,为什么呢?因为来我们的RDD,我们在这里点我们干嘛呀,给他直接来一个什么,那么我们的这个我们的啊,咱们看啊,我先把这个其实啊,那我先不管它吧,咱们先这么写啊来嗯。咱们先这么写啊,写成一个line啊,诶不对,呃,为什么不对呢?是因为啊,我们现在去用这个操作有点问题了,因为我刚才呢,其实想把time返回的,那这样的话只剩下这个time了,可是这样的话会有个问题,你数别的数据就看不到了,对不对?所以啊,我们这个地方除了过滤以外,数据还是要保留的,那我们直接用map可能就不合适了,那我们直接干嘛呢?用一个field就可能会好一些啊,那么你的field呢,就要求它会有一个判断的功能,所以呢,我们的time应该怎么办呢?同学们,我们的time应该点咱们叫star with,因为呢,它要求的是我们二零什么,咱们的这边是15年5月17日,那咱们这个时间的格式呢,也是一个固定的格式,所以呢,我就完全可以这么写了,对不对,你的时间是不是,诶以它开头的,如果是那我就保留呗,所以点叫collect,然后点啊,我们这边写上叫做for it,给它来一个print,嗯。
06:43
好了,那我现在呢,就给它运行一下啊,咱们来看一看咱们的结果啊。啊,这些功能呢,在我们学skyla的时候,大家其实应该学的比较多了啊,只不过咱们这个底层有一些分布式的计算,包括一些不同的分区,对不对,而且当不同的分区做过滤的话,有可能会导致数据倾斜,这个咱们不之前都说过了吗?嗯,大家可以看到我们现在呢,都是2015年5月17日的,没有任何问题,对吧。
我来说两句