00:00
刚才我们已经给大家把这个强类型的u daf咱们讲完了啊,你会发现呢,跟那个弱类型的u daf的实现方式不一样,但结果是完全相同的,对吗?啊,所以啊,他们实现方式不一样,原理可能底层都是相同嘛,对吧?呃,那么其实啊,我们说了,那主要原因呢,是因为我们早期的这个弱类型的u daf啊,在我们新版的Spark当中已经不推荐使用了,所以呢,标上了一个我们的横线对吧,一个横线不推荐使用嘛,但是有个问题啊,同学们。我们说了是SPA3.0,它不推荐使用呢,那么早期的时候说明还推荐使用它呀,那这个时候如果我们想用强类型的怎么办?因为那时候弱类型也能用。那么你强类型有没有呢?对不对,你现在是因为不推荐使用弱类型,只使用强类型呢,那么早期版本弱类型也能用啊,那你强类型该怎么用呢?对不对?所以啊,咱们这里给大家说一下啊,来咱们拷贝,拷贝以后呢,咱们写成一个二,什么意思啊,就是我们在早期版本当中,咱们有没有强类型的聚额函数,其实也有,而且我告诉大家,其实就是它就叫aggregator都不用变,就是我们早期版本的强类型的聚合函数,其实就是它你连改都不用改。
01:14
只不过用法是不能这么用的,所以咱们在这里补充一下。咱们在这。呃,什么意思呢,咱们在这吧,啊,咱们在这儿来补充一下。嗯,什么意思呢,就是说我们在早期啊,来咱们叫做早期啊版本中我们的这个Spark,它不能在我们circle中啊,它使用我们的强类型啊,我们的udf操作。他用不了,为什么呢?他不支持啊,所以他不能用,那该怎么办呢?对不对,所以这个咱们就用不了了啊,哎,用不了了,那你用不了怎么办呢?首先我们说了,那你咱们除了咱们讲过两种语法,大家还记得吧,一个叫circle语法,还有一个其实叫做DSL语法。
02:04
那么S语法呢,其实就是结构化数据的那种查询方式了,而我们的DSL其实就是什么面向对象的那种查询方式啊,也就是说有对象有方法,然后传一些参数对不对,所以这种方式它就是跟类型相关,而我们恰恰我们当前的它具有类型,所以啊对于我们来讲就简单了很多啊,所以我们接下来写来那么早期啊,来咱们早期的u daf强类型啊,强类型聚合函数它是使用。我们的DSL啊,咱们语法操作。那么你DSL语法操作的话,那你首先你得有相应的它吧,对不对,那所以我们的DF就有了,那么DF大家想想咱们data frame它有类型的概念吗?没有,那所以呢,我现在得把类型给它加进去,那么得变成data set吧,那么你data set的话,你是不是得有类型啊,哎,所以啊,咱们这里来一个我写当一个叫case,咱们叫class叫做。
03:06
这个我确认一下,咱们点一下叫username和H,所以我写上啊,咱们来咱们叫做user nameme,然后写上一个string,然后再加上一个H,哎,咱们写个long,咱们写上一个long好了,你这么写完以后,那我现在呢,就把咱们的data frame干嘛呢?变成我们的S,我们写上啊,咱们这里呢,叫叫做什么呢?叫做U,好把它变成U,但是你会发现这里面有个点点点表述的是隐示参数,没有找到没关系,还记得吧,我们应该有个叫import。然后Spark点我们叫implicit,点下划线,你这么写完以后,点一下我们的data frame就可以转换成咱们的data set,你这么写就行了,你这么写了之后,那么它就是有类型的对不对?那么现在你就需要把我们的聚合函数干嘛呢?诶转换成查询的列对象,你的目的不就是为了去查询它对不对,所以啊,咱们这个叫浪就不合适了,记住啊,同学们这个叫浪就不合适了,为什么呢?因为我们是把一个就是把类型的概念加进去,那么类型的概念加进去就等于把一行当成个整体了,所以我们在这种情况下,这个U的我们应该编一下。
04:22
啊,把它变成U,打它变成U的话,那么这个地方应该是个U,那应该是个U,所以呢,应该是点,咱们叫做什么呢?叫做H,应该是他同样道理,那么我们现在我看看啊,咱们这边应该叫做啊,这输出输出没事儿,这是输入,这都没事儿,我们只需要把这边改一改就可以了,啊好了,那我们的输入呢,应该是一个我们的U行可以了之后,那么我们现在干嘛来写上。把啊来写上,将我们的udf,我们的函数转换为查询的列对象,列对象。
05:02
就是你把它当成个列对象,那这个时候你去查它就没问题了,所以这个时候呢,我们写上啊,咱们叫做new,然后把它拿过来。叫做u daf,然后呢括号,然后点它有个叫to column,叫做变成列,把我的函数当成个列,然后去查去,所以点一下叫VAR回车,回车以后这个就是我们的u daf的那个查询列就是它啊好,那我现在写完之后,那你怎么查的呀?那太简单了,大家看来拷贝拷贝以后点我们这里叫select,还记得吗?叫查询吧,你就查询这个列啊,就查询这个聚合的列,因为你查询这个聚合的列就等于把一行当成个对象,把这一行当成个对象的话,那不就传到这个U的这儿了吗?对不对,然后buffer和浪没有区别啊,好,那你这么写完以后点一下我们给他来展示一下啊,记住其实就是比较诶特殊一点,将我们的巨额函数当成一个查询的列,用我们的DSL,语法操作来查询它,哎,是有这么一个步骤啊。
06:10
好,运行一下。好,同学们,看结果是不是也能出来呀,没有任何问题吧?哎,结果也是对的,说明啊,这是我们不同的使用方式,好吧,同学们。
我来说两句