00:00
好了,同学们,我们接下来给大家讲下面的一个,嗯方法啊,这个方法的名字呢,我们叫做simple啊,呃,这个simple呢,其实它来自于我们的古法语是吧?嗯,它有样品呢,样本的意思啊,那在咱们这个功能当中,它其实表述的是从数据源当中抽取一部分的样品数据啊,做一些我们简单的分析是这样的啊,那么简单来讲呢,就是抽取数据的意思啊,那么这个抽取数据的,嗯,其实它会有不同的抽取方式,那什么意思呢?比方说我们从一个数据源当中把数据抽取回来之后,那么你这个数据是不是还要放回到数据源当中。就好像我们抽奖一样,对吧,抽奖箱里面啊,把里面的一些比方说有十个球,那么你把这十个球呢,抽出来一个,那这个球抽完了是放不放回去,诶它是不一样的,因为如果你放回去的话,就有可能被重复的抽到,对不对,但是如果你要不放回去的话,那就不会重复抽到,对不对,所以啊,我们的抽取数据啊,它就有一个重复的概念啊,是这样的,还有一个就是你的每一个球,它有可能得有多少的概率被抽取到,这也不一定。
01:13
啊,所以说我们这个抽取数据啊,它其实它是随机的啊,它是随机的,那所以在我们的使用当中,大家可以看到我们的simple的这个方法呀,这个算子它里面有三个参数,这三个参数当中的第一个他就问你了,诶我们是不是抽取完之后放不放回去,那么这个叫with replacement就是。如果为true啊,它的值如果取true的话,就表示的是我要放回去,那如果为false的话,就示的是不放回的意思啊,然后呢,这个叫ction,这个fraction是分数分值比率的意思,对不对啊,是这么个概念啊,那么然后这个叫seed,它表述的是一个叫随机数的种子,这个咱们一会儿再给大家稍微的说一下啊来,那么我们这里呢,一块儿呢,给大家看一看,嗯。
02:00
把这个呢,我们关掉啊,咱们这个关掉,然后拷贝啊呃,拷贝以后呢,我们写上一个零八,然后呢,把这个呢,我们去掉啊,然后拿过来放到这边把这个去掉。然后这个地方呢,我们的数据啊,咱们都不要的啊,咱们都不要了。然后这个地方我写上咱们叫make r DD,然后咱们写上一数据源,然后写上一个123456789啊,写个十吧,嗯,好了,然后呢,我现在要干嘛呢?我现在要想从这十个数据里面来抽取数据,所以呢,我们写上叫做点儿啊,咱们叫simple。那么这个simple当中,我们说了它有三个参数,对不对,所以在这里咱们说明一下,咱们叫做simple。这个算子呢,需要传递三个参数,那三个参数当中的第一个参数,它表示的是我们抽取数据后是否将数据放回,那么这个数据放回当中啊,首先给个true表示放回的意思,嗯。
03:08
好了,那么如果为false呢,就表示丢弃,就是不放回的意思啊,咱们叫丢弃,嗯,好了,那所以呢,我这边可以可以给大家分别演示一下,比方说诶,我们false,那么你false的话,比方说我抽到了二,那我以后再抽的话,这个二就抽取不到了,对不对?诶就是这个意思啊,然后呢,我们接下来呢,我们再来,当然还有第二个参数,第一个参数表述的是是否会放回去,那第二个是什么意思呢?它就表述的是每条数据可能被抽取的概率,所以啊,这边比方说我写个0.4,咱们随便写的一个啊,这是个double类型嘛,所以我们给他一个这个fraction,嗯,那么第二个参数。第二个啊,我们的参数它表什么意思呢?它表示我们的数据源中,它每条数据,它被我们叫什么呢?叫每条数据被抽取的一个概率,就是这个东西啊,但是这么说其实不准确啊,为什么呢?一会儿咱们再去解释啊,就是这么说其实没有那么准确啊,好,那么我们来看一看,我们再看我们的什么来,嗯。
04:14
写上一个三,它还有第三个参数啊,第三个参数它表示什么呢?表示的是我们抽取数据时随机算法的种子,其实说白了就是随机数的种子啊,因为咱们大家都知道随机数它靠的是随机算法来实现的,对不对啊,所以说它是一个种子,说的简单点就是这个算法的第一个数,那你说有啥用啊,诶咱们一会儿再说啊,咱们先不管它,先写上一个我们的一好了,写完以后,那么这个时候就会被抽取数据对不对,所以点点了以后记住我们现在collect采集,采集之后我们这里来,我们写上一个叫for it,然后呢print,嗯。记住了同学们我诶我觉得这么写是不是不太好啊,不太好的原因呢,是因为我这个可能感觉上是诶是回航的,那所以呢,我这么写吧,咱们叫mix string,然后写成一个逗号,然后写成一个点啊,咱们叫做它,然后呢,这么写是不是会好一些呢?对吧?所以我们运行啊,看一看我们抽取数据是什么意思啊,首先这里面就有一个false,它抽取完数据它是不会放回去的,那么这样的话是不会被重新抽取的,所以他们数据是不重复的啊,咱们看一看。
05:27
大家可以看到是不是我们的一二六十呀,诶,你会发现是不是我们的数据并没有重复的对吗?所以啊,这就是我们当前所演示的效果啊,这个是我们的force,表述的是抽取数据,它不放回去,第二个零四呢,表述的是每条数据被抽取的概率,但是有的同学在这个环节他就会误会了,说老师你看那这个是0.4,这个是十条,那是不是意味着他表述的是抽取数据的百分比呢?就是你有十条,那么我就抽取四条,是不是这个意思呢?所以有的同学会误会,所以呢,我们再给大家执行一下,大家看啊,记住现在是多少幺二六十。
06:09
所以啊,咱们再给大家执行一下,让大家来体会一下是什么意思,嗯。刚才呢是幺二六十。执行以后怎么了?同学们看,诶,你会发现这个抽取数据好像抽的是一样的,那么我们再来给他看,再运行,记住啊,这是第三回运行了,第三回运行的情况下,我们看它的结果是多少。你会发现其实它的结果依然是幺二六十,哎,那这是为什么呀,其实这就是第三个参数决定的,因为当你把这个种子确定好之后,那么我们的随机数就已经确定了,那么在这种情况下,咱们这个每个数据抽取的概率就已经发生了什么诶变化了,为什么呢?因为它统一了你的种子是一样的,你们每条数据那个概率的那个随机值就被确定了,那么确定以后,那么就只可能是一二六十出来,不可能别的出来。
07:12
这是为什么呢?我们说一下啊,就是我们的第二个参数,其实有什么概念呢?有一个叫做基准值的概念啊,来咱们说一下啊,咱们叫基准值啊的概念。什么叫基准值呢?咱们举个例子啊,比方说我们考试,你考试的时候,咱们有个60分,那个60分是不是意味着及格啊,那如果你考了70是及格还是没及格,那及格了,那如果你考一个我们的65是不是也及格了,所以有的时候啊,并不会区分你具体的什么,那个值只是有个标准,有个及准对不对,所以啊,这个0.4就这种感觉啊,就这种感觉,就是说我现在给你打个分儿啊,这个分儿是诶,大于0.4还是小于0.4,那么当你大大于0.4以后,你就能够出来,当你小于0.4就出不来,对不对,就是这种感觉啊,就这种感觉,就是咱们说了嘛,是概率嘛,那概率是多少啊,比方说0.5 0.3,诶不一样,那么所以当你种子确定以后,你每个数据的那个概率就被确定好了,确定好了之后,那么只有一二六十才能出来,所以说这个种子你其实是可以不用传的,如果你传就固定了,你不传它就是随机的啊,所以来咱们说一下啊,来第三个,嗯。
08:23
那么如果啊,来写上,如果不传递第三个我们的参数,那么啊,如果不传递第三个参数的话,那么使用的啊,我们叫做当前的什么呢?系统时间啊,那么当前系统时间每次执行是不一样的嘛,所以说你把这个注掉啊。把这个给它逗号去掉啊,好了,这个值我就不要了啊,咱们暂时现在就不要了,然后呢,我们再来执行,同学们看还是0.4,但是我那个随机数种子发生了变化,拿当前的系统时间当成随机数的种子,这个时候跟刚才的结果就应该会发生变化啊。这个时候是多少,三八九十,然后呢,我们再来啊,咱们多执行几次啊,看一看效果,因为光执行那么个一两次,可能这个效果不是很明显啊。
09:11
咱们来执行一下看看啊。诶,大家有没有发现并不是那个百分比吧?啊说十条数据0.4就是四条数据出来不是吧,你看我们这里是不是就出现了三条,而且每一次好像也都不太一样,对不对?诶就是这个概念啊,所以这个0.4它是一个我们的概率啊,它是一个概率这个怎么体会呢?其实呀,大家看啊,我们点击这个点击点击完成以后,在源码当中,它其实是有判断的,就是如果这个值为false的话,它会走这么样的一个RDD这个RD当中啊,会传一个我们的这个,这个呢叫什么呢?咱们称之为叫做伯努力算法,这个伯努力呢,其实我们简单的理解为它是一种离散型的几率的分布,它是我们N等于一的时候的二项分布的特殊情况,所以它就类似于我们抛硬币,你抛硬币的话,不是正面不就反面嘛,对不对,诶所以就这么个意思啊,就是说给他一个分值来决定这个数据到底是否能够被抽取出来,就是这个概念啊,所以它有一个我们这个。
10:17
比率的概念,一个概率,嗯,好,那么除了这个以外,咱们再看,如果当前你的这个值是一个true的情况下,那么这个true的情况下,它其实用的一个算法呢,什么呢?叫做波松啊,分布的一个离散,嗯,概率分布算法,那就是这样的,所以呢,这个其实啊,是由一个法国的数学家啊提出来的,对不对,它也是用来做统计和概率学里面的一些分布的算法,这个咱们了解一下就行了,这个不是我们的重点好不好,同学们,所以后退啊,后退,后退以后回到这边来讲啊,所以我们分别的给大家演示了一下这个随机数,包括这个值的变化啊,那么接下来我们要给大家说这个false的问题了,好,这个呢,我们现在给他来拷贝,拷贝以后再来复制一下,嗯。
11:02
把这个呢,给他干嘛的注掉啊,注掉注掉以后干嘛呢?我就要改成个true,改成个true是什么意思啊,它表述的就是说我们的抽取完数据是要放回到咱们的数据源当中的啊,那这样的话,你的数据就可能被重新再抽取,对不对,那么这个时候第二个参数就有变化了啊,所以咱们这个地方说一下,我刚才说了这个地方不准确吗?为什么不准确呢?来。呃,如果我们是抽取啊,咱们叫做抽取放回啊,放回的这么场合啊,就是抽取不放回啊,抽取不放回的场合,数据源中的每条数据,它表示的是抽取的概率啊,然后呢,这边有一个基准值的一个概念啊,就是这样,但是如果它是什么呢?抽取他要什么放回的场合呢?来咱们叫做放回的场合,那么这个它表什么呢?它表示来嗯,表示我们的数据源中啊,源中的每条数据,每条数据它被啊抽取的一个什么次数。
12:12
就是你抽取的可能次数啊,就是嗯,可能次数,比方说诶,我写个二来看啊,我写个二,这个二啥意思,它表述的是每条数据可能被抽取两次,记住我说的是可能是两次,但没说一定是两次,可能一次都没有,也可能很多次,这都是有可能的啊,所以我们现在呢来这个为true,这个为二啊,那行我们运行一下看结果,嗯。看一看会得到什么样的一个结果啊。好了,大家看一下诶,有没有发现我们的一它就被抽取了两次,但是这个二就被抽取了一次,然后呢,三和四是没有被抽取到的,我们的五被抽取了两次,六被抽取了三次,这个七就很多,对不对,七是六次,八是一次九,诶所以每个数据啊,它不是说一定会被抽取到,但是呢,如果抽取到的话,它会有一个次数的概念在里面啊,所以这个呢,我们就了解一下啊,有这么一个功能,它是用来抽取数据的啊,它可能呢,就是诶抽取完数据他不放回去,有可能会重复抽取,对吧?它会底层有算法在里面啊好回过头来看课件,课件当中,其实我们这里呢,都把这个分别的写了一下,这个同学们下来呢,可以按照这个参数呢,自己设定一下试一试啊,然后呢,他说了思考一个问题有什么用啊,是不是用来抽奖啊,其实不是。
13:39
呃,当然你抽奖也可以这么用,对不对,但是其实啊,它我们一般用它怎么用呢?比方说我们可以呢,在数据倾斜的时候来使用它,为什么会产生数据倾斜呀,大家想想你之前咱们讲过,咱们之前的那个分区的数据是不是怎么啦,你分区的数据是不是都是我们均衡的呀,对不对啊,你分区数据啊,它其实是均衡的啊,它是均衡的,既然均衡的话,怎么会出现数据倾斜呢?恰恰是咱们之前讲的那个叫沙否。
14:11
因为你杀否的时候会打乱重新组合,那么大家想一想,有没有可能极限情况下所有的数据就分在了一个组当中啊,对不对?那现在你有两个分区,所有的数据都到了一个组当中,这边根本就没有数据,那是不是就数据倾斜了对不对?你的这个就根本就浪费资源了嘛,所以这种是肯定不合理的嘛,为什么呢?这个数据量特别少啊,都执行不了,而这个数据量特别的多,执行非常的慢,你的资源的利用是不合理的,那该怎么办?那是不是应该给他调整一下呀?诶,所以啊,咱们的这个simple啊,就可以判断一下到底你的数据它怎么倾斜了,举个例子,比方说相同的key放在一个我们的什么我们的主当中,对不对?比方说我们是相同的A啊,都放一个主当中,那么如果是A对不对,都放一个主当中了,那我就要想办法把这个A变了,对不对?可是你怎么知道是A导致它数据倾斜的呢?它是不是B呢?我不知道,所以啊,我现在就想办法从这个里面去抽取数据。
15:11
比方说它里面有1万条啊,我从1万条里面干嘛呢,抽取100条。我抽取100条的情况下,我发现呢,它有98个我们的A,对不对,然后呢,干嘛呢,我再抽取下个100条,我发现呢,有97个A,然后呢,我再抽取100条,诶我发现有90什么九个A,那我就有理由判断对不对,但是我可以再多次抽取嘛,我就有理由判断是不是里面的A太多了,你看我抽了这么多次,它都有大量的A,那么说明我的A太多对不对,那这个时候我就想办法在咱们处理之前呢,对这个A的这个key啊进行特殊的操作,比方说进行转换呀,让他不要重复呀,对不对,有没有什么别的办法呢?诶把它改善一下,那么这是这个时候呢,他们就不会放到一个组当中,是不是就好一些呢?所以啊,咱们抽取数据其实是在一些特殊的场合下去使用呢,好吧,同学们,这个咱们了解一下,当然了,你要说我们这个抽奖呢,其实也可以,对不对,看你怎么做了。
我来说两句