00:00
啊,那这块啊,看一下我们这个地方是不是已经拿到我们想要的数据了。我们没有做什么聚合吧?要做聚合吗?那有同学可能想到这块,我们可以不用这个reduce色的是啥?对吧,就目前我们感觉到可以不用reducer了,但是我告诉你不行不行,因为这个reducer它跟那个map一样,它内部第义好的,那这个map是不是负责了有一个input的方法的。跟它对应起来的吧,他去读数据的对吧,那reduce这边其实绑定了一个out form来写数据的。来写数据的啊,除非你说你不想往啊这辈子当中写。那你就可以不用reducer,你直接从ma完了之后写出去,但是只要但凡你想某里边写出去,这个reducer至少设为一个,就说reducer必须走,因为它是跟后面奥拉夫的方法对接的,是不是?对吧,哎,它是跟for对接的,OK,那我们看一下,既然map是继成一个叫什么table map,那你想想看,它应该也继成一个table算法。
01:10
Video。在这。刚才看到他几个型啊。两个吗?那类。就说他少了什么呀。Value,你看它value把它限定了吧,是这个类型,那我们看一下这个类型。他是一个。抽象类,那我们只能看它这个实现了继承类,OK ctrl h。是不是有一个put呀,对吧,那也就是说最终你要封装成数据啊,就在于丢这一边,你只能封装成这四种类型的,要么delete put,还有一个equipment。
02:02
那我们选择的是不?啊,选择了put,那也就是说从这个map端啊,其实你可以这个地方不写put对吧,但是呢,你写的text,那你这个put是不是还是要到reduce单去封装呀?啊也就是说这个地方我就提前写的是负的,那radio单就不用做任何处理对吧?直接把你的数据可以转发一下,直接写出去吧,但radio单就没有任何的一个压力了,没有任何的一个压力了,这样的一个过程,OK,那这边他要三个反型,那前两个好写吗?是不是直接把这个拿过来。然后它还有一个K2的对量,那K2的既然它没有所谓定义的话,那我们直接用那。那可那也可以,因为他并没有多先定,那不要这个了啊,不要这个K了,那其实reduce呢,其实就很简单了,我们还是重写它的一个reduce方法。
03:07
维酸要做任何处理吗?不需要吧,他就把它这个数据给他干什么,写出去就OK了吧,哎,写出去就OK了,那这块我们要对这个values进行定义编译编利对吧,因为video它不知道你前面的一个入key这边传来器到底有多少个吧,哎,它是将相同的一个K干什么,做了一个迭代器啊,做了一个迭代器,那这块我们只需要对这个value斯进行遍历,然后一个一个的写出去就OK了吧,你看它的迭代器里面封装类型是什么put的吧,啊就是我们从ma端传过来的一个一个的负的对象,一个一个的复对象,是这样的,OK,那这块我们Y64点。做循环啊,一个一个的Y,那这个最后直接context.right。那干,然后这个地方写。
04:02
Y6它肯定不会报错,因为Y6是负的类型,负的类型是不是满足刚才我们看到的这个类型啊,对吧?啊,这个类型它肯定不会报错的,OK。啊,这个地方呢,就比较简单直接就是便利写出啊,因为我们在radio端呢,按照我们那个需求,没有不需要做任何处理啊,不需要做任何处理,当然这个review你说把什么值取出来,做一个累加可以吧,啊业务只要你能拿到数据你就可以啊,就可以OK。便利,嗯,然后写出。命令写出就OK了,这是他做这个事情,我们在做这个事情,OK,然后最后写我们那个driver driver还记得怎么写吗?这个卖方法里面写那个什么七步是吧,你们那写的,其实官方建议是这样,官方建议要继承con是哈杜那个con。
05:04
哈,多的那个呢。I好,我一个com这个,然后要实现一个接口。错好多吧,优秀下的,他优下的这块实现个方法,最后我们还要写一个卖方法,因为驱动类肯定有一个序的入口,对吧,要有卖方法,那我们看一下这几个东西。一个弱,这个就是真正的执行的,也就是说你们写的当中呢,你们获取叫过呀,叫里面设置驱动类啊,什么麦和类,Reduce类,然后说设置output,然后它的一个参数等等,在这个wrong里边啊,就执行的OK,然后还有两个方法,一个set。设置它这个什么。配置文件还有一个。
06:00
Get获取配置文件获取配置文件,那我们先把配置文件在这定义一下。等于一个闹一个闹。我们把它变成吧,然后康复怎么写这里边。this.com等于这个Co吧,哎,等于那get呢?直接把这个comp给他返回了吧,哎,给它返回了,那这个就写完了,那这个润方法里边呢,就像我们刚才所说的,哎,它其实就是写真正的那些封装的账包啊,Map类啊类啊等等这些逻辑的,那首先获取的是什么内容,或者照个对象,那照个对象是不是要有一个。看法还记得吗?来看一下,叫我。点吧。哎。这个没有打包,是包下的吧,然后get他要一个com,他要一个com,那这个。com,我们直接用这个cooper行不行呢。
07:14
可以。然后。我们改成叫我,还是习惯性的叫我是吧,这个叫获取任务对象。获取对,然后接下来还有什么。指定专类对吧。好指定专类之后还要指定买吧,然后是。指定reduce reducer,那后面还有什么out,还有什么个数,最后说什么提交对吧,最后还有一个提交,提交OK,就大致是这些东西。然后指定driver这块好写吧,Job点再加是不是,然后我们把这个服务driver。
08:08
别。class.class给它放进去,OK,那还有指定member,你之前是不是叫我点set,诶,在这了是吧?你之前怎么写的叫我点set Michael class当前我们是从哪读出去啊?贝斯,他也封装了U,他也封装了U,那什么呢?是。Table。MAPR9,看见没?Map有条,那注意同样的map跟map有一个是过时的吧,是不是过时的啊,我们用新的。然后它有什么方法点初始化,看见没初始化table map和还有初始化table reduce吧,哎,它是通过这个工具类来帮我们封装的,那我们看一下它里面要什么东西。
09:06
要一个table,就是说你这个map不是绑定了input form吗?你要指定它从哪个表里面读数据,对吧,这个要有走,我们用的是fruit对吧,有it fruit这张表OK,然后逗号。第二个参数。B要一个什么?干扫描器对吧?啊,那我们直接在这用一个干可以啊,啊用一个SKY好。同样的,你这个扫描,你是不是也可以指定它start stop key啊对吧,你就指定扫描范围对吧,就是你要读这张表,你要是全表读呢,还是说读某些范围呢?哎,这个也是可以指定的,OK,那第三个参数。买累对不对。点class好,然后呢。Output key,还有output value,对不对,那就是刚才我们看到了这个类型。
10:03
CTRLC在这吧,我们那个。点。Plus还有一个Y6的类型,是不是我们Y6是铺的,是不是都在点class,最后你看它还有一个什么。Job job导啊,因为之前咱们都是通过什么job.set当前呢,我们就在这个工具类里边,哎,也是用了这个job,它其实把这些东西都给它封装进去了啊封装进去了OK,那其实这个fruit不在这写死,从外面传阿斯传进来也可以的,OK,那接下来是reduce reduce,同样的也是用的table ma YouTube点。It。推过教我吧。好,它里面要什么参数呢?看一下首先还是这个table,你想一下这个table是什么。你要往哪个表里边写吧,我们这个地方,我们准备往输入它下划线二里边写对吧?啊第一个参数搞定了。
11:03
第二个他要一个reduce的一个类型啊,Reduce的一个类型,OK,那给他一个我们是服务它。video.class。他还有一个什么参数啊。只要一个job就行了,你看它这个地方它可以指定什么法定线对吧,那自定义分区的话也可以吧,OK,那这个地方只要job就行了,Job就行了。这就行了。那接下来最后还有一个提交吧,提交。交点wait for competition OK,这里边给到一个。他有一个返回值,我们就这个返回值,嗯,要不要无所谓,这样吧,零或者说。然后问号,然后把这个币给他吧。
12:01
嗯,写反了问号。把这个给他拿过来。零一还是同样的,跟我们之前一样吧,啊,返回一个result,然后result返回0101这样的一个结果。这是我们这个地方把什么价包塞进去了,然后其实这里边都指定了我们看到的ma的一个什么输入输出类型啊,都有了,都有了,OK,那最后是运行吧。那运行怎么写呢?既然我们用的是什么。继承了一个run,对吧,OK to,它用的是to。Run点让方法,方法它这个里边要一个什么。配置文件,那这个配置文件我们就不能说从其他地方获取了吧,我们只能创建吧,这个创建还记得吗?H base con点。通过这种方式创建,然后把这个给他好,就创建的h base的一个嘛,因为这个h base com它是继承自哈多的,所以它会也将哈多的相关的一个配置文件也放进来。
13:16
啊也放进来,那你map所要的一些配置文件呢,就是属性呢,也有了啊也都有了,OK,那它还有一个什么。To to,那我们什么是to,我们这个drive是不是to,对吧?我们实现了这个to对吧?OK,那我们直接用一个。Fruit driver fruit driver OK,它还有一个什么菜,还有一个什么。阿克,那我们直接把主方法的阿克斯给他吧,主方法给他,还有一条给它抛一下。然后它也有返回值,想想看它那个返回值应该是什么。对吧,它还是一样的,01IN特类型的,Int类型的,好我们来看一下这个run方法怎么来驱动,我们这里边怎么调动,好我们看一下整个过程,首先你点进去看一下这个状方法啊,点进去。
14:09
传了三个参数在这配置文件,Tool跟这个阿克斯,这个阿克斯是我们麦号码传给他的,对不对?OK,那这个to呢,是我们专用类法。好,你再往下看,他判断了一下,如果说你这个com为空嘛,他给你创建了一个com,对吧,当然我们不为空,不为空对吧,OK,不为空的,OK,然后你看这个地方。它调用的是tool.set康,那也就是在我们这个地方,其实调用的是这个set方法是不是。也就是说,此时我们外面定义的这个东西是不是传给了他?这能理解吧,就从外面定义的,因为你里面先调用的是set com这个方法呀。对吧,你是这个康康是不是往下来一点。这个抗是不是这个东西。
15:00
传进来的。这能理解吧,哎,传进来了,也就是说这其实我们wrong方法里所用的con啊,都是从我们慢方法里边给它重新设置进去的,重新设置进去OK,再往下看。啊,这个康复我们解决了,也就是说从外面创建的,也就是说我们为什么一定要在外面要创建一个con。然后你再看。它调用的是to点状方法对不对啊,那拓点状方法是哪个呀。图啊,我们传进来的是不是利用了他的对象塔,那他的对象掉是不是还是掉这个状方法,哎,最终还是走的我们这里面的一个逻辑。啊,这里边的一个逻辑,OK,那你这个comp也赋了值了吧,所以说根据这个comp呢,拿到一个对象也没有问题了,啊,也没有问题了,是整个这个逻辑是这样的。啊,整个逻辑这样的,为什么官方这样这一章写就是你们之前写的那些啊,都没有问题,都没有问题,什么时候有问题呢?如果说你在走ma任务的时候,要添加一些额外的参数,这个额外的参数指的是。
16:07
不是你自己卖方法里边需要提供的参数,因为执行一个memory,你看啊,刚才我们看到的这个东西,它是不是有什么杠D这种内容啊,其实它还有杠立波斯。杠利波斯就额外依赖一些价包的时候,他执行的,如果说你不用官方建议的这种方式,它那个无法解析,就是你们后面的参数白写了,他是在哪解析呢,在这。对你后面跟的那些什么杠Li呀,什么杠input t SV啊等等这些的一个参数做解析,如果你不走这个逻辑的话,它就没法解析,就是说你后面的一个参数白写了,你们后面做那个电信项目的时候,会有一个添加,那个什么MYS依赖会通过杠力这种方式来添加,如果说你用你老的方式这种写的话,你只能打全量的一个架包,就是说什么意思,你得把所有的依赖全部打进去,你的项目才能运行。
17:03
或者就是你用这种方式,直接用杠力把那些什么MY驱动方案,额外的驱动方案给它添加进去也可以啊,这个就是解析后面那些。啊,官方的一个。额外的参数的,额外的参数的,它核心的我们是要取这些内容,其实整个的看了,如果说它没有这个解析,创建一个解析者是吧,然后去解析后面的一个哈,都表一个什么参数,如果没有这两步的话,你完全跟你什么以前的内容直接写一个卖方法,然后写七步都可以啊都可以,你要知道这个官方他推荐这样写到底有什么好处啊,到底有什么好处,那尽量啊给他纠正过来,就以后写这个麦呢,尽量这样去写好吧。就是继承一个com这个com呢是哈多国家的,然后实现这个to,实现这个to,这是官方建议的一种方法啊,官方建议的一种一种方法。
我来说两句