00:00
好了,同学们,我们接下来来学习RDD的转换算值,那么从数据处理的角度来讲,咱们的这个算子呀,就是方法呀,它整体上它会分为三大类型,因为你是方法嘛,那么我要处理数据对吧?那么你的数据的类型它是不一样的,比方说我们又叫单子类型,叫做value类型,比方说1234 1234,这就是单一的值嘛,对不对?还有一个叫双子类型,那双子类型一般只是两个数据源啊,比方说你这边有个AB,这个做操作双子类,还有呢,我们叫类啊,就类似于我们所啊数据类型不一样,方法其实也不一样啊,那首先我们从咱们的这个value类型,就是单子类型入手,咱们先给大家讲第一个我们的算子,咱们叫做map,这个map呀,在我们的skyla集合当中,我们应该强调过,它是我们集合当中用的最多的一个方法了。
01:00
为什么?因为我们当获取数据之后,你想做统计分析,可是这个数据的格式它逐渐的满足你的要求,所以我们必须要把我们原始的数据转换成我们新的数据,是不是?所以啊,这个map啊,它就有一个转换映射的概念啊,我们要将我们的数据给它转换成我们新的数据,OK,咱们来接着给大家看啊来,那我首先呢,在这个里面呢,我们来点一下啊,我这边创建了一个叫operator,我在这里面呢,来new,我创建一个包,我们叫做什么呢?叫transform啊,咱们叫transform转换嘛,然后呢,在这里呢,我们点击我们的new啊,创建class,我们叫Spark,然后呢,零幺,然后RDD,然后operator,然后再写上一个transform OK,好了,呃,点击OK之后,我增加一个焖方法。然后呢,我把咱们基本的这个代码呢,我拷贝过来,拷贝拷贝过来以后,在我的下面这个地方呢,我们写上咱们叫SC,点我们的stop这个地方,我改一改,咱们叫operator啊这是我们的算子了,好,那这里我们写上叫todo,我们叫做算子啊,来算子,然后写上一个map,那么首先第一个先把我们的基本的数据源先准备好,Make RD,然后list,我们1234,然后来RD,诶这么写就行了,那我现在想做一件什么事情呢?很简单,我就想把原始的数据源中的数据呢,给它乘以二,哎就是这样,以前不是1234吗?我就想分布式计算当中,把1234变成2468,就这么简单,所以啊,他把1234它要转换成我们的2468,所以这个时候啊,它就属于一种映射转换的概念,所以我们就需要用到这个map了啊,OK。
02:53
那我现在就写上叫RDD,点我们的map,那这个map呢,它里面会有我们的函数的颗粒化,但是后面这个呢,其实咱们暂时可以不用管,为什么呢?隐私参数咱们大家应该是学过的,对吧?我们暂时不用管它,我们就看第一个,第一个它是需要传一个函数进来,对不对,那么需要传一个函数进来的话,那我得准备一个函数啊,所以我这里写上咱们叫map functions,那你随便写个方法就行了吗?那肯定不行,为什么?因为map呢是有要求的,他要求我要把集合中的每一个数据传递到这个转换函数啊,所以啊,它其实是一个转换函数,它要将我们的每个数据给它传进去,然后呢,再把它转换成别的值再返回,所以说这个参数它就要求必须是int类型的,所以我们写个number,然后加上一个int类型。
03:50
然后呢,我刚才说过了,要将我们的每个值乘以二,那乘以二不还是int吗?所以把这个返回的结果写成一个int就可以了,那这个时候number乘以二不就OK了吗?同学们对不对?好,那我现在呢,这个我们的map function a给它放过来,你这样写的话,它就可以将每个元素诶进入到这个函数当中,然后挨个变历,把数据转换,转换成功一返回就可以了,所以说同学们看,我们点叫VAR回车,回车以后这个记住了,是我转换之后的啊,咱们转换之后的,但你转换之后的对不对,是不是我乘以二的呢?所以我们拷贝一下,嗯,拷贝拷贝以后点我们叫collect啊,采集,采集之后我们的for each,然后我们的print,对吧,我现在就希望把1234变成2468呀,嗯,好,运行一下,运行以后看结果啊。
04:51
好了,同学们看2468是不是出来了,没有任何的问题吧?哎,就是这样的啊,所以其实还是比较简单的,但是啊,如果我们这么写的话,会感觉有点不方便,为什么呢?因为你这个map呀,它确实是需要一个函数传进来,但是你每一回都声明一个函数,是不是有点太麻烦了?所以咱们史GALA函数式编程当中有一个匿名函数的概念,就是我只关心逻辑,我不关心我们的方法名对不对,在这种情况下,那是不是意味着同学们我这个声明方法的代码可以简化了呢?
05:29
那怎么简化呀,哎,咱们可以这样,咱们写上一个我们的括号,然后写上一个箭头,写上一个花括号,对不对,但是它有要求,它有什么要求呢?我们需要把那个int类型的参数给它传进来,对不对?诶我们要这样,然后呢,我们这里要有返回,那么这个返回呢,我们给它写上一个叫number,我们乘以二就可以了,所以大家可以发现,我就把前面这个声明的函数,诶给它用了匿名函数来代替了,这个也没有问题啊,来,我们运行一下。
06:06
你会发现呢,你用上面这种方式可以用下面这种方式,可能会感觉更加的简单啊,更加的简单一些,好了啊,看一看我们的结果没问题吧,同学们二十六八是不是也出来了,诶,那一说到简单,咱们死GALA当中的质简原则是不是就是来了,什么叫自检原则啊,就是能简单则简单,能简化则简化。能省则省,所以啊,同学们看我们的代码来,首先我们第一个当我们的函数的代码逻辑只有一行的时候,花括号是不是可以省略,所以花括号可以省略啊,没问题,然后再来,如果我们的这个参数的类型可以自动推断出来,这个类型可以省略对不对,诶是这样的,好,再来如果我们的参数列表当中的参数它只有一个,那么小括号是不是可以省略啊,诶,可以省略对吧?诶这样的,然后呢,我们发现呢,你这个参数在我逻辑当中它只出现一次,而且是按照顺序出现呢,那么这个是不是可以用按什么使用下划线来代替啊,所以这个前面的参数可以省略,把这个number用的下划线来代替是可以的,所以啊,最终我们简化后的代码,其实应该就是我们现在的这个代码,好我们来执行一下。
07:28
好2468,那这样的话,这个方法咱们就算是说完了,把一个旧的RDD,大家看一个旧的RDD是不是变成了一个新的RDD啊,这个我们就称之为叫转换啊,叫转换的算子。
我来说两句