00:00
好,然后呢,我们把这个东西来洗一下,好,他要继承这个战好还是用这个代码,这个呢,我在额外建一个包吧,啊把这个两个包呢,给它隔开哦,这个叫udf。把这个扔到这个包厢。我们再来一个包。啊,直接来个类吧,啊直接来个类叫抗点I硅谷。点UDTF.my udfo了这个名字。他刚才说了。我们看到的是继承自。UDTF对吧?啊,记成这个类啊,记成这个类,那这个当中你看一下,其实这个类呢,它是一个什么东西。你看这两个图标,这个I知道什么意思,接口C呢是class类,好,那你看这两个类,你有没有发现这两类不同啊,对吧,这两边有一些那个。
01:03
灰色的对吧,啊,这个是抽象类啊抽象类啊,既得个抽象类,那肯定要实现什么udf uf好他就报错了吧,啊不像刚才那个,刚才那没有什么实现的方法,这个报错了,报错奥回车。奥家在这上面随便任何一个地方奥加回车可以干什么,第一个实现这个方法,第二种也可以不报错,叫你把当前这个类也支持什么抽象类也可看,不会报错吧,那我们肯定写实线嘛,啊实线诶一看点实线发现问题不对了。刚才我不是说要实现三个方法吗?那怎么只有两个呢?来我们看一下啊,点进去,也就是说这里边有一个初始化方法,对吧,它有实现,但是我为什么说刚才一定要实现呢?我们往下看,它最终会掉到自己的一个重载方法,还是自己了。点你看这里边干什么事,也就直接什么都不干,直接干什么好,也就是说这个方法你要干什么。
02:08
对吧,虽然有实现,人家实现体直接是干什么事的,好一好,那这个不靠谱啊,所以我们要干什么,说实话啊,说实话有两个一个。这个化斜杠呢,是什么过时的,那我们肯定用什么不过时的吧,啊要不过时的啊,先放在这儿看,诶我CRLZ先放在这吧,先让它调负类的这个方法,因为要不然他报错,因为这里面东西呢,我们还不会写,不会写,那不会写怎么办。对吧,这个东西我说了要去记的啊,但是第一次拿呢,我们看一下,因为它的返回值啊,也是一个。又出现了叫结构体object什么?结构体里边这个对象in什么意思?校验器校验,它就是做类型校验的啊,做类型校验的OK,那这个怎么办呢?在这个上面CTRLH,因为当我们遇到这种不会写的东西,我们就干什么。
03:04
人家肯定有实线嘛,我们看一下人家的实线对吧?啊,大致的看一下CTRLH这个就是它的一个所谓的一个什么。继承结构啊,那你看我们自己写的这个东西也在继承结构里边了,看见没。啊,因为它是整个所有的继承它的类都给你列出来了,那我们找一个,这里面应该有个杰,我记得是非常好杰森啊,找到它那个什么。初始化方法。在这找最后一行代码,你选中这对吧,这个呢,到时候大家记得我先把它拿回来。CRC,因为它这个返回值肯定是对的嘛,返回值肯定是对的,OK,我们把它放在这。好吧,好,他要两个参数,一个是字段名,一个叫字段的,什么o is。对吧,字段名,哎,叫字段名啊。
04:00
那你说对于这种函数,它取的字段比例。给谁去的?就是一个函数,这个函数里边要定义一个什么字段。它会定义的是我们输入的字段吗?那你一个函数是不是你关心的是输入跟输出。它叫field,是不是叫字段比呢?对吧,那是输入的字段名,你能说在方法体里边,我规定一下,将来我只能接收ID。这不靠谱吗?对吧?啊,那这个东西实际上就是什么输出的啊,输出的其实你在这个地方也能看到啊,我们找到。这不是初始化方法吗?对吧,啊,他说对于整个一个实例呢,要用一次啊,我们这也说了,那看这个下面他说返回值,返回值呢,是一个什么结构体,什么对象的一个交验器,我们不管它什么东西,我们来看一下这个。
05:01
往下看。看这句话,你看能不能看得懂。是一个字段来看这直接看这被覆盖,被用户所提供的一个列的别名所覆盖,那也就是说这个地方就是刚才我们猜到这个字段名应该是属于什么。输出的字段名,也就是说,假如说你这个字段名不写。它有一个默认值,就类似于sum,你是不是可以取别名,边名是不是覆盖啊,哎,这这块它可以定义一个啊,就这个意思啊,定义字段名,那后面呢,叫o is,而且你发现了它跟这个东西有关系吧。是不是啊,它有关系啊,它有关系有什么关系呢?它这个地方,它整个的叫结对象。校验器对交接器,而且是类型校验,其实这后面第一个就是它的一个类型。
06:02
啊,我们刚才看到一个什么Java three那个东西,对吧?啊,它就是定义个电容,它它没有,我们直接out加回车,叫create local variable叫创建一个本地的什么这个内容来看一下,诶这个东西我们就说它其实是个什么list,那new一个等于什么new一个list不就完了吗?对吧,用一个list这里面添加什么东西我们再聊,那同样的它呢,Out加飞车,Create local。诶,它也是一个什么list,那我们来列一个list a好第一个。大家通过这个地方,我们看到它叫字段名,它叫列名啊,就是类型两个都是a list,那我们很难理解,因为你是a list,我肯定要说一个list。对吧,大家看到这个list能想到什么问题?
07:00
他不是一个,而是一个list。输出字段是一个例子的,也就是说炸裂这个方法可以输出多个列。能听懂,就之前我们X explore对于line进行炸裂,是不是炸裂出来还是一个列啊,也就是说实际上人家这个炸裂函数可以炸裂什么。多个列,也就是说假如说啊,我们现在有个需求是H。啊呃,然后是一个word word,然后at什么硅谷四个单词,我可以干什么事呢?这样我可以做把他们俩一切分。从中间一到划开,假如说它是多画分割的,它是多号分割的,它是按高低分割的,我有一个什么需求呢,这样。我要把H跟艾放在一行,然后W跟硅谷放在一行,能听懂这个意思之前,我们做的是不是把整个的HW、硅谷放在一个列当中?
08:04
对吧,也就是说我们可以用自定函数啊实现这样的功能。能听懂,它可以炸裂出来两个列啊,因为这块呢,它提供的是一个什么。List啊先,那既然你是list list里面放一个数据行不行。嗯。肯定可以吧,也就是说炸出来我只有一个列,先呢,我们从简单的来啊,后面呢,大家写一下炸列出来多个列了啊,多个列的好四段米,它里边three我们随便定义是不是fail的那点at字段名,我们刚才的需求是不是把一个单词按照逗号分割,然后变成什么。变成一个一个的string,那这个地方呢,我给它取名叫word进行。我叫我可以吧,就是名字嘛,随便取,而且呢。到时候用不用还看我们心情呢,我们是不是可以用别名覆盖呀,啊,用别名覆盖是这个意思啊,别名覆盖一般的正常情况下我们都会去取别名啊好,接下来是这个东西了,它的一个类型啊,那这个地方呢,是非o.I。
09:12
变爱了,那这个里边内容呢。就要大家自己要去干什么,要去记一下了啊,这里面呢,有一个特殊的一个类。拿一个东西对吧,你没必要说把这个东西背下来。好把这个东西背下来,这这么长是吧,啊,那我们就像之前跟大家说的。你知道有这个东西用到的时候我们去干什么,拿一下啊,导光奥家。嗯。但不能导包。他让我们创建点。他非得点包没导进来还可以点,那我们用的是哪个。Java。一个内容啊,Java的一个内容,哎,应该是这应该是Java,前面是Java。
10:03
嗯,对,哎,我们先放在Java上面,你看Java上面有哪些。这个是short string time sta,还有word,还有其他类型,那我们用的是这个string,因为上面这个地方的word出来,最后出来的单词是什么?注意啊,这个类型。跟什么有关啊,是我这个地方spring,所以我写的spring吗?我就怕你们混了,是因为这个地方是spring,所以我这个写的是spring吗?是不是啊,这个地方的three控制的是什么?是你这个。列名叫什么?而这个地方的three是你当前这个函数的返回值。假如说你是hello word,逗号,逗号,我出来的不是hello,是单词,我写词拼,假如说我里面放的是一逗号二三,我这可以写什么in的,你可以写硕,可以写double,能懂这意思,它是这个地方输出是你这个列将来以什么形式输出的,能懂这意思。
11:15
不要以为这是spring,这是spring啊,如果说这样说的话,那这个恒定spring,那这不就完了。那这就不,你只要记一个4G不就完了吗?那还给你提供什么数的double干什么呢?能听懂啊,它这个地方定义的是函数整个的一个返回值,OK吧,啊不要搞混了,不是说这个地方的命啊,这个地方命是控制这个地方你。列名是取的是一个string类型的列名,能听懂啊,不要搞混了啊,所以呢,我就怕你们混了,所以说特意问一下,那注释我加一下第一个这个是定义什么。输出数据的。列明吧,啊列明好,这个地方是定义。
12:01
输出数据的。类型注意是输出数据的类型,不是列明的类型,OK吧啊最后呢,是一个返回值啊,返回值这个是初始化方法,整个的初始化方法当中呢,你要注意这一块呢,是你要去记得一个点啊,要记得一个点,因为你out加回车,它是不是没有这个初始化方法,你一定要写,因为不写的话,你掉这个方法,人家掉是不是你没怎写掉负类的了,直接给你什么好一常啊,那肯定是你不想要的,所以呢,你在这里边要盯一下啊,其实呢,这个注释和方法,我们整体的做一个注释。这个是定义输出数据的。什么东西?列名和。数据类型吧,啊是数据类型啊,再次强调是数据类型啊,这个是我们那个初始化方法,把那个结一下。
我来说两句