00:01
好,那接下来呢,我们要自定义这个u dtf函数了。啊,它比较麻烦一点,它比较麻烦一点,它不是像刚才我们一进一出,因为刚才uf是不是一进一出啊,是不是我们那个方法你看看出来了,进一行数据返回值接一个了啊返回一个就这意思啊,一进一出,那现在呢,Utf就是一进。多处一进多处OK,那我们看一下这个里边呢,有这个点。我们要实现类似于这样的一个需求。一行数据用string表示的。是hello逗号,Word逗号,哈宝逗号。我要实现一个UDTF功能来干什么事呢?把这一行传进去,传进去分割福。做什么?切分,也就是说我们之前提到了,你可以对一行数据用进行切割,切割完了之后用X炸裂了,现在我我要实现太麻烦了,我要把它俩功能干什么合并,那你看这个我们要实现的这个功能是不是把它们俩功能合并。
01:13
因为首先用split切割出来变成什么。数组,然后数组炸裂,这个肯定没问题的啊,要两步,我现在呢,就想实现一个功能,就直接做这个事,而且你斯类的这个东西,刚才我们看到那个后面分割符是不是可以自己传进去啊,也可以自己指定吧,可以切割任何的一个字符是任何。分割符的一个字符转码,那我的功能呢也是这样。我这个切割符啊,自己传进去。啊,做内容什么。啊,这这是这是我们的一个功能,但是更重要的是我们要讨论的是它要实现什么类,然后要重写什么方法,对不对。类似的100A的等等这些东西那是不是一样的呢?哎,它不一样,它呢要。UDTF,其实这个类实现核心的三个方法来看一下。这三个方法第一个叫。
02:07
初始化第二个叫。这个就有第三个叫。诶想一下这个东西,这三种方法跟什么东西很像啊。Maple。Video这边是不是都是类似的三个方法,只不过人家叫3UP clean,那跟三我叫初始化,这是不是一样的呀,对吧,也就是说这三个方法从调度关系上来说,初始化肯定最先调,而且你不是一进多出吗?那你告诉我这个初始化。调用一次,针对谁调用一次。啊,无所谓了。啊,因为呢,大家想的是在想这个,因为有可能刚才有点误导,有点误导,误导在哪呢?因为呃,MR当中呢,它是针对于一个任务调一次对吧?啊针对于一个任务掉一次,那无论它是这个地方呢,说实话是针对任务调一次,还是针对于一行数去掉一次啊,他肯定在整个操作当中掉一次了啊无论哪个逻辑当中,那它相对来说process呢。
03:27
这个东西就是一行数据掉一次啊,一个参数,我们不是一行数据进来吗?对吧,你要出去多行,一行进来调一次,它就跟map很像,Map方法是不是对那一行数据。调一次一行数就调一次,然后你卖的方法其实跟那个UDTF很像,你的方法是不是一进多出。你对一行数据写出去多少次,N次吧,对吧,你一行数据里面有四个单词,最后写出去四次,写到化中去吧,啊写到环境缓区这个意思,那这个里面同样的我们在map方法里面是不是用context写出去的,写到什么环境缓冲区,那其实系统的这些东西啊,至于写到内存里边,因为它还要跟原表进行关联嘛,那写到哪是你决定的吗?
04:19
不用,你就告诉他写什么东西就行了,能理解这个事儿。我们当时MAP6当中那个map方法,我们所说的写到环形缓冲区,是你说把那个环形缓冲区扭出来,然后说往里面放吗。是不是他给你一个contact的这个接口,对吧,入口,然后你通过调用一个RA的方法给他写出去啊,那在这个UDTF当中也一样,它也有一个方法写到某一个缓存当中。因为我们考虑到未来它是不是有还有ne做自写,他一定先写到环境里边,跟其他的表数据还要做什么。要做关联,不是说直接写到文件就OK了,因为它好跟原来的数据做关联,那最后一个方法就简单了。
05:04
就最后调用一次对吧?啊,最后呢,也就是说初始化调用一次调一次,然后呢,中间的process对于每一行数据会。调用一次啊,然后写出去多次,这个是我们从整体上来把握三个方法,那其中这个初始化方法。那你说这三个方法,哪个方法最重要?Process,因为process我们说了,对于每一行数据,这一次它传进来的是不是一行数据。没问题吧?那你想炸裂成什么样子?按逗号分割,按杠地分割还是按中段分割?是不是在process里面写的?想一下能不能想通这个问题,对吧,虽然我们现在还没写这个整个的一个代码,但是你要想,因为结合了之前我们所讲的map任务,那你那个map方法是传进来一行数据,是不是在里面做切割,写出全部在这,那现在有一个process方法也一样的,这个是我们最核心的方法啊,你要知道这个里边。
06:05
整个这个东西怎么写啊,到时候我们会来写初始化方法,它是干什么事的,等会我们写一下这个告,这个方法里面东西啊,很恶心的点就在于它的类型大家都没见过。就是它里面spring不好意思不叫spring,它里面double不叫double,所以说这块呢,额外的要去记得,也就是说这块代码你要去记得,当然你说你记不住,但是你要记得什么,哪一块咱们讲过你自己不整,有很多人不自己整理文档吗?对吧,整理一个文档,然后你在文档当中要有这个东西,因为将来用到的时候可以拿出来看一下,你你脑子里边有这个东西是指的什么意思呢?是你记得,诶这个可以做,但是具体怎么做,你可以干啥。不记放在一个纸质的文档当中啊,或者哪当中用到的时候去翻开看一看,这一块是需要记的,因为它跟之前我们学到的那些什么病啊,法宝这个类型不一样。啊,因为在函数当中它有特殊的一个类型,包括大家学到Spark那一块,它跟have对接的时候,它的类型也不一样,它里面也有Switch,但是外就类似于MYSO当中词这波差一点。
07:11
你是不是要额外的去记过差呀,对吧,额外的去记的,但是呢,由于这个东西啊,它不像来搜的那么普遍在用,它用的还是少一点,所以它里面类型啊,你知道有这么个东西。啊,你知道有这么东西啊就够了啊,不需要去记录,你看他的视频,可以简单看一下他的视频,他这个。叫Java的什么啊,他的这个名字。对吧,这个呢,你知道有这个点就行,不需要去记啊,从总体上,而且这个初始化方法,我们后来跟大家说一下,它定义的是什么东西啊,定义的什么东西,诶也就三块,一般的情况下,如果你里边有流操作,对吧,我们一般在初始化里边是干什么。开一个流。在这个close方法里边把流给它干什么啊,关闭掉是这意思,然后process里边去用这个流,那我们这个方法呢,并没有用到什么流啊,资源问题,所以呢,Close方法里面将位看不到什么东西,就放在这就OK了啊,放在就OK了啊,同样的假如说写完之后,同样的也是打包啊,放在这个价包下,这个后面都一样。
08:15
啊,后面的一样啊,使用啊,这些东西都一样,这个呢,我们把它截一下。
我来说两句