00:00
那么再往下走的话,同学们大家想一想,那目前呢,咱们这个其实我判断是否为首单这个业务呀,那还是不完整的对吧,还是不完整的,为什么呢?你光从咱们这菲查了,那么我现在你这个订单对吧,就你你下一个订单,那说明什么?说明咱们现在用户对如果是首单的话,对,那你是不是应该对吧,把给标记一下对吧,比如说啊,在咱们这里边同学们。在哪呢?对吧,在在咱这对吧,我现在呢,我要想判断是为首单,那么判断是否为首单的话,那么从哪来判断呢?是不是从咱菲尼克斯来做一个查询啊,对吧,那么我现在呢,把这个菲ho尼斯呀,再画一下吧,对吧,在这里把它拿一个对吧,这里边呢,是我们这个菲尼克斯对吧,或者A也行,对吧,A对吧,其实底层还是操作嘛,对吧,那么咱们现在呢,要判断一下我这个呢是否为首单,那么如果是否为首单的话,我们有一个表,对吧,叫user states对吧,有一个user states这样的表,那么在咱表里边呢,维护两个东西,一个呢是我们的U的ID,那么另外一个呢是我们的if cons。
01:13
对吧,哎,我现在呢,维护这么两个内容对吧?那么假如说啊同学们,那么咱们现在呢,在从我们这里查数据的时候,那么如果说我现在有一个四这个用户对吧?那么四这个用户呢,那么到哪呢?到咱们这里查,那我发现啊,那么咱们现在这里没有吧,这里不只有123呀,对吧?那么也就说123的用户,是的,他已经消费过了,那然后我现在四没有,那说明说明四是首单的四首单,那么咱们现在那你这个是首单,那你是不是也得标记一下呀。对吧,你是不是得把这东西给我写过去啊,对吧,你把这个东西啊给我写过去,就是原来你可能曾经啊你曾经对吧,你在这里没有,但是呢,你今天你又买了一个东西,你下了一个订单,那么如果下了订单,你是不是也算消费过了,我是不是应该把你消费的状态再写到我的中去啊。
02:04
能理解吗,同学们?那跟着吗?为啥没有反应来注意同学们,咱们现在想获取用户是不是曾经消费过对吧?那我是不是在我这A里边维护了一张表表怎么来这个维护的呢?有两个字段,一个是我们现在的用户对吧,123这个用户ID,那么另外一个呢,对吧?随便给他一个值对吧,你可以用任意只标记啊,我就用一类标记对吧?表示什么呢?表示一类用户曾经消费过,二类用户曾经消费过,三类用户经消费过,对吧?假如说啊,我现在我这个订单呢,是四类用户下订单,那么咱们首先第一件事,我是不是要从我的h base里边来查询一下,看一看四这个用户是不是我们现在这个曾经消费过呀,那发现诶这个东西它没有消费过,没有消费过,咱们怎么做的呢?咱们在order info里边有一个属性,然后呢,给他标记一下,说这个四啊,它是首单啊,它是首单,那么如果标记的是首单用户的话,那么大家想一想,既然这个东西是首单,那么咱们说明他现在是不是也是已经下订单了呀,那么等下次咱们这四折以后再买东西的话,他还是首单吗?不是首单,你是不是得把这个东西给我维护回来呀,对吧?
03:07
所以说呢,那咱们现在得干什么呢?得去更新它的状态嘛。对吧,这个用户对,就是首单用户啊,那么咱们这个下单之后,咱们呢,得去维护的状态,注意啊,在这里我们呢要再往下走,这是什么呢?这个是第二步操作对吧?那么接下来第三步操作,对第三步操作。第三步操作什么呢?是我们这个维护首单用户的一个状态啊,维护首单用户状态对吧?什么意思啊,什么意思对吧?那么表示的是你当前呢,这单是首单,但是对吧,那也曾也已经消费过了,我们要把消费的状态对吧,维护到我们这个h base中去,对吧?就算当前啊,如果当前用户为我们这个首单销首单用户,也就是说他是第一次消费对吧,那么咱们啊,那么我们进行首单标记之后啊,首单的一个标记之后啊,应该将咱们这个用户的一个消费状态,将我们这个用户他的一个消费状态保存到哪呢?保存到h base中是吧?等下次是等下次这个用户是吧。
04:43
等下次呢,这个用户啊,再消费的时候,再下单的时候啊,再下单的时候就不是首单了啊就不首单了,能理解的同学们对吧,那咱现在呢,那来呗,标记一下对吧,那如果标记的话,其实这个是不是一个完整的一个业务算完事了呀,对吧,那完整业务算完事,那这个候咱们现在再再再看一看了,那这个时候咱们是不是就得该提交提交了呀,对,那怎么做来在这里对吧,我呢现在去做一个我们这个对吧,做一个我们现在的一个each RD对吧,点for each r DD对吧,然后接下来那么咱们拿到我当前那个RDD对吧,那么这个RDD有什么呢?RDD点我们这个for我当前的数据啊,来进行一个我们的操作,那每一次操作呢,你拿到的应该是一个订单对象对吧,然后接下来注意这是我们一般的思路啊,但其实呢,对吧,你拿到之后你发现你没有办法往下写了。
05:42
对吧,你正常意思如果现在把这个东西往那往往往那个什么A东写,但是你发现你要写在这的话,发现我们这里,我们是不是其实订订单对我来说啊,我们这个东西没啥太大意义,我们是不是主要想把这个用户给它保存到我们现在这个A备去了,其实我最终想保存是什么,我曾经封装了一个压力类,对吧,叫做user this,就是我们现在想把这个东西都要给它保存过去,对吧?那么如果保存的话,大家注意啊,咱们把这东西RTD拿到之后,有没有什么方法可以直接做保存的。
06:15
填一下咱们RPD没有什么save as什么什么什么什么。试一试呗,RDD它应该有一些我们这个什么呀,有一些行动算子,比如说和C有相关的这个RD是不是可以保存为什么文件,RDD是不是可以保存为什么这个对象对吧,但是如果说要有一个可以保存为我们这块Phoenix什么什么东西呢?这个太完美了是不是。对吧,但是没用对吧,没关系,同学们看啊,在这里我们呢,在我们这个写这个代码之前,我们是不是加了一个依赖呀,这个依赖是什么呢?这个依赖啊是我们这个啊这个阿帕奇啊Phoenix对吧,这样一依赖,那么而且呢,你看这里边谁说phoeni对斯Spark的支持啊对吧?来那接下来咱们看一看啊,我要干什么呢?我现在呢要导包导谁呢?啊来在这里我呢要导入我们这个阿帕奇阿瓦蒂啊点我们这个帕点谁呢?菲那克斯点谁呢Spark点啊塔线,那么如果导完之后呢,注意看同学们,咱们现在呢,再去调一下对吧?诶我看是导错包了啊没没了是吧?来在这里我现在呢要把这个东西拿到,这是因为什么呢?这因为我在这儿啊,我做了一个咱们这个自动的一个导入导,就你看你们你们现在我看好多同学,咱们在导入的时候,你们是不是得一个一个的凹回车去导包啊,对吧,是因为我设了一个自。
07:40
导包对吧,他发现我现在这没用的这个包,所以说呢,他现在给我拿掉了对吧,那我现在在这里RDD.save一下了,点save一下对吧,然后呢,我要把这个东西倒过来对吧,你前光看它好的地方了,是吧,他有的时候事情是双面的是不是对吧?来那咱现在呢,有一个菲尼克斯对吧,有菲利克斯啊,现在再到这里边呢,有一个对吧,先等会对吧,Spark对吧,Spark我先把它复制一下啊,一会在美路好吧,来点下划线是吧,那么咱现在呢,在这里啊,注意看同学们。
08:14
是吧,就比刚才是不是多了一个方法,而且这个方法你看save to菲尼克斯对吧?那你想我是不是就想把我当前的数据保存到我这个菲尼克斯里面去啊,对吧?所以说当来了有这么一个方法,对吧?那么如果有这个方法的话,大家想一想这个东西啊,我们只知道哦,他给我提供一个方法,但是这个方法怎么用,你是不是还得再研究研究啊,对吧?那么怎么用呢?Ctrl PIN,看一看当前这个方法需要很多参数,第一个参数p name,你能给我提供吗?对吧,你要么咱们现在分析个哪张表里边去保存呀,在这儿呢,同学们,咱们现在在我这里,我是不是创建了一个叫u states023这个表,对吧?拿过来往这张表里面来保存呗,对吧,往这张表里保存呗,对吧?来那咱现在呢,把这个表拿过来对吧?那么咱们除了这个之外呢,注意这也是个坑啊,这个坑我就不写了,等于为咱刚才坑已经遇到过了,对吧,是不是大写,然后接下来到第二个参数什么呢?第二个参数你们告诉我什么意思?
09:14
Ten。Column斯嘛,对不对,V,那么咱们现在就给他传参,应该以什么形式传给他,是不是一个集合的形式传给他呀,对吧,在咱们SKY的语言里边,SEQ它其实就是Java的粒子集合嘛,对吧,所以说我现在呢,在这里我呢可以给它传一个我们这个这个SEQ过去,对吧?而且里面放的什么呢?放的是S串对吧,我现在是不是两列呀,那就来呗,那么其中一个叫什么?一个叫做我们这个U的ID,那么另外一个呢,叫做我们的s c a ctrl c,对吧,把这一放对吧,然后呢转换大写,然后呢,咱们现在CTRLC往这一放对吧,然后把它转换大写对吧,转换大写。好了对吧,那么咱们现在的第二个参数搞定了,那么第二个参数搞定完之后呢?那么接下来再往下走对吧?那么第三个参数,第三个参数什么叫configuration,那应该和配置有关系呗,对吧?那咱们现在人家要求你来一个配置文件对象,那么咱们就来一个呗,又一个configuration啊。
10:26
Configuration啊。啊吧,来大家想一想,咱们现在啊,那这是谁的呢?好像这个东西我听了很多啊,而且它的确有很多的叫configuration对吧,你觉得哪一个呢。就从他给他提供这些,你说让我选一个,我选一个最贴近最贴近的。你选一个你们比较熟的,你们最熟的,和你们感情最深的。
11:10
哪个还都不看,我可是和你感情深是吧?好,那就来这个。它是豆的conation啊,它是handle豆compation啊,然后接下来再往下,同学们注意啊,这个东西咱们其实没有什么配置吧,对吧,如果你要有什么相关的配的话,那你可以直接通过这个来配对吧,因为什么?因为咱们本身底层是不是要往HDL写呀,对吧?这里你也可以有些配置的对吧?然后接下来ZKURL,那这个人家也提出是不是也也比较清晰了呀,对吧,组keep地址呗,什什么类型呢。Option option,那怎怎么给你复值呢?Option它怎么给复值,Option它本身呢,有两个词类,一个呢叫now,那另外一个呢叫star,对,那咱们现在肯定得给有值啊,那么有值的话是不是应该star对吧?那所以说呢,咱们应该是我们的啊,然后接下来这里边to keep teacher哈,DO202哈,DO203哈DO204端口号二幺呀。
12:17
对吧,那就完事了,我看我写在这是不是不报错了,那就行了呗,对吧,那就行了呗,对吧,那RDD往这去转换,同学们,那你现在保存的是谁呀?你保存的是不是我当前里边放的是我们这个订单呀,到我这里放订单对吧?那运行一下试试,来运一下试试,看一看会有什么问题,对吧?我现在能想到的就是这个东西啊,菲尼克斯保存吧,其实你们想一想,这个东西可能保存进去吗?应该应该保存不去,对,就相当于什么,相当于我现在本身这里面放的是订单,你偏偏往人家这个这个什么用户状态里边去保存。说肯定这是保存不去,保存不进去的呀,对吧,那我让大家看一看这个错误啊,看一看这个错误对吧,就算保存不进去,我也让你们看一这个错误对吧?来,那我现在呢,在这里,我们那个这个起着呢,然后呢,我把这个order呢,这个重启一下。
13:31
把你重启一下对吧,那么重启,因为咱们现在没做输出啊,同学们,那没做输出的话呢,咱们就直接运行了对吧,那来到这里,我现在呢,去执行一下我这个程序对吧?来看一看咱现在呢,给咱们报不报错对吧?希望能给咱报个错误啊。We。是吧,错误等这么长时间,对吧,大家看一看对吧,咱们现在呢,在执行的时候,他给咱报一个这样的问题,报一这样的错误。
14:06
啊,对,不匹配的列是吧,对吧?那所以说呢,人家要求你啊,就是咱们现在如果说你要是想去执行我们现在这一个save to菲尼克斯的话,那么要求什么呢?要求我当前RDD中对吧?它所存放的数据,它的一个属性,它的个数和咱们现在我们这个h base表中的这个列的个数啊,那必须要一致啊,所以说这块呢,咱们要处理一下什么呢?注意,那么在使用啊,在使用我们现在这个save to菲尼克斯的的方法的时候啊,方法的时候,那么要求咱们这RDD中它存放数据的类型啊,它的属性,它的一个个数对吧?那么和谁呢?和我们这个啊菲尼克斯表中字段数啊,它的一个字段数,那必须啊要一致啊,必须要一致啊,那咱现在呢,那你得去的这个转换一下呗。
15:07
对吧,你肯定要转换一下,怎么转换呢?大家想想RPB现在里面放的是什么,放的是不是咱们现在它的一个所有的我们这个订单呀的所有订单,那么接下来,那么咱们现在呢,那你肯定得把这个东西给我转换一下,对,把这个转换一下,那么怎么转换呢?那应该是我们这个RDD,然后接下来R。啊,这个卖吧,转换结构呗,对吧,然后既然那这个转换结构的话,那它本身这是一个什么,这是一个order in对不对?到这个订,这是一个咱们这个订单,那么你现在把它转换的什么呢?那你现在我再转换的时候,我是不是应该把它转换成一个我们这个用户的状态,他们是不是有样的类型user states,那么这个时候user states里面有两个东西,同学们,那你是得给我指定一下,那这两个从哪拿呢?一个是order inport,点我们的user ID啊,那么另外一个你直接给它指定就行了,对吧,然后这块咱们呢,去托string一下对吧,To string一下对吧,那这样的话,咱们现在给RD对吧,那就完事了对吧,那得到一个新的DD,现在应该是user date的RDD,然后咱们要把用户的状态给做一个保存啊,把用状态做一个保存好了,那咱现在呢,来看一看同学们,呃,我现在呢,执行的这个操作,然后呢,把它转换成我们的用户状态RDD,然后接下来。
16:28
去调它里边给我提供的一个C度菲尼克斯方法,这个方法不是RTD有的是谁呢?是咱们菲尼克斯对Spark添加的一个这个支持,对吧,你得把这个包袱导进来,才能够去调档这个方法,对吧,然后接下来咱们现在呢再去运行。运行程序咱们期望看的效果是什么样的,是不是应该是在我们这个啊,分表里边应该有些数据了呀,对吧,那来看一看咱们现在它的一个效果。
17:12
一共生了多少个订单呢?一共是是否订单对吧?那么咱们现在呢,肯定应该有一些对吧,那我这个对吧,也生一些我这个新用户嘛,对吧,那咱现在来到这里啊,我去查询一下来查询对吧,看一看同学们在咱们这里边对吧,在咱这里边对吧,是不是可以看到我现在呢,这里一共是我就租的用户啊都过来了,哎23个对。看一看,那咱现在这一个事五订单,那可能有多多有有咱们这个多用户下的呗,看一看这个东西对不对啊,拿的是数据数据对吧,可不可能出现这种情况,比如说你看123对,然后这里边呢,有没有重复的。没有重复的吧,对吧,哎,那咱现在这里边大家想一想,我一共是15个订单,23个,这个会有什么问题吗?这这种情况对不对。
18:14
其实咱们现在呢,这个还得对吧,这个有些事得做一下。咱们现在在这里对吧,同学们,我们直接呢,上来直接就把它做一个转换,对吧,那意味着什么呢?意味着咱们当前呢,拿到的所有数据对吧,都得都都得去转换一下了,对吧?但其实你想我们现在更新状态,人家假如说啊,我本来我以前我就已经消费过了。对,本项目已经消灭过了,那这个时候咱们还有必要再给他复制一下吗?对吧?所以说咱们现在呢,在处理的时候,同学们来看,呃,在这里呢,我们如果要是维护状态的话,那其中呢,我们这里其实可以干什么呀,可以去做一个过滤,对其实这里怎么过滤的,其实我现在其实在维护咱们状态的时候,我只对谁呀,就只对首单的来做维护呀,如果不是首单的,那其实是不是没有必要维护呀,对吧,那这是一个对吧,这一个,然后接下来呢,除了这个之外呢,那咱们现在这里好像还不太对,对吧,因为什么我现在就算啊,把这东西拿到了对吧,拿到一个什么fair啊filter,对这然后进来咱们对它呢,做一个我的处理封装的这个对,然后做一个保存对吧,但是刚才我看我生出的这个就是这个是。
19:35
15个订单对吧,是15个订单是付完成吧,这这生成多少订单对吧?咱看一看啊,这是20个订单对吧?共成订单20个对吧?然后接着那咱二个订单呢,那这里我刚才多少个,这里边23是吧,那是不就对了呀,对吧,原来有三个是吧?那这也对了,但是注意啊,这样这20个我不一定都去给它更新的对吧,有可能以以前也可能有对吧,所以说这块呢,咱们要加一个,要加一个什么呢?加一个过滤对吧,那么咱们现在呢,对吧,什么呢。
20:06
呃,就是他啊。将咱们这个手单。呦后退出来。加十单用户过水好了,那么这样的话,咱们现在呢,更改用户的状态呢,这个就完事了啊,更改用户的状态这就完事了,对吧,我把它停一停。
我来说两句