00:00
就是你们在咱们Spark呀,Spark streaming啊,Spark circle里边就有没有说我现在拿的数据之后,我就可以直接的给他捅到MYSO里面去的。啊,谁的?你们有to什么买什么的吗?他没有吧。你们曾经啊学过一个东西叫什么呢?叫咱们Spark circle啊,这个Spark circle当时你们在讲的时候,同学们首先呢,你们应该也是在命令行里边来讲,对吧?然后第一次讲的时候给你们介绍应该是个叫Spark session的东西,说我现在啊,这个Spark程序之间的入口是Spark con Spark circle乘以帧入口SPA session,然后接下来那么咱们现在呢,在我们的SPASO里边应该给你们介绍了什么DF,什么DS,是不是这些东西啊对吧?然后记下来咱们怎么样去对创建个DF的。可以吐一下是吧,可以转换成它对吧,然后接下来那咱们现在这里除了这种方式之外,它好像还可以去什么短漏,这个是不是什么通用的加载方式。
01:12
对吧,然后还有什么呢?我我现在之后加载数据,好像除了加载数据之外,好像还有别的吧,还有写数据对不对啊,写出去好像有个叫什么right是不是这个东西吗?忘记了对吧,那来呗,好像是有是吧,好像有点印象对吧?那咱们现在呢,来看一看都有哪些东西,咱们现在干什么呢?首先呢,你啊注意啊,这个东西在咱们SPA里面有,但大家呢,已经忘记它了,那就得先把这4SPA circle啊,该用的东西给我创建出来啊创建什么呢?首先第一个同学们,我现在呢,想要去创建我们这个,呃,想直接SPA circle,那第一个你是得先创建的一个程序直行的入口,对吧?来创建我们这个Spark session的这个对象,那么这个对象怎么来创建呢?SSC点,然后呢。
02:07
18康太子,然后呢,啊想一想你们第一次接触构建者,我记得那天给你讲构建者设计模式的时候,有人告诉我,你们在18斯里面接触构建者设计模式啊,对吧,那咱现在呢,在这里啊,那应该是什么?是不是有一个什么Spark session,然后接下来对吧,那这里咱们现在呢,点是吧,是不是有一个builder呀,对吧,Builder,那build完之后呢,这里是不是有一叫get or create对吧,然后进来点VR拿到了什么呢?拿到了一个Spark,对吧,叫对象,然后现在咱们现在呢,在指定的时候,这里除了咱们这get可以获取值的之外,那其实这里面应该有一个属性,咱必须要指定叫APP name吧,对吧,叫p name是吧,这个呢,来指定一下是吧,比如说诶这个呢叫什么SPA是吧,然后呢,Circle。
03:07
啊,这个呢,是我们这个好了,假如说这个东拿到,那么拿到之后呢,那么咱们现在呢,在这里我们呀要开始对吧,去定编辑代码,那怎么编辑代码呢?对来在这里咱们点一下注意啊,刚才你点翻了博瑞在咱们Spark so里边对吧,他有谁,他有条Spark contest在你Spark content拿到之后呢,你拿不到咱们这个Spark session对吧,因为咱们说这个最原始的是谁,最基础的咱们是不是RDDRDD是谁的概念,是咱们Spark库里的概念,它是咱们Spark核心最基础的一个抽象对吧,叫弹性布数据集对吧?然后接下来你不管是SPASO也好,SPA session也好,它的核心都是人,都是Spark号,对吧,所以说呢,咱们现在在往站里边对吧,你不管是SPA station也好,还是我们那个string con也好,对吧,它其实呢,都封装了我们这个Spark contest啊,都封装Spark contest对吧,然后接下来那么。
04:08
那你现在呢,那你可以啊,去教他有的方法,对吧,来去拿这些东东西,对吧,大家看啊,这里有什么啊,有什么read对不对,对吧,Read对,这read是不是读取数据呀,对吧,读取数据,那么其实除了咱read之外呢,那还有什么,咱们现在这里,我要想去保存数据的话,好像有read方法,但是注意对吧,这个read呀,大家想一想,当时咱们在讲我们这个read读数据的时候,那应该是不是有好多呀,比如说我现在读数据对吧,来创建什么什么这个data frame对吧,但是呢,那咱们这里是不是好多不同的数据来源呀,对吧,那你想一想,咱们看一看,当时你们再去这个讲的时候,对吧,那什么有什么Json呀,有什么咱普通的一些文件呢,转到这里,其实呢也可以,对吧,其实我现在可以通过它来从不同数据来源来加载数据,那咱们现在如果说是把这个DF拿到之后呢,那我现在想干什么呢?我现在想对吧,去把它保存,那你得先把DF拿到,那么怎么拿到DF呢?那这个时候咱们是不是有一种方式叫谁呀?是不是RDD可以把它转换成did frame呀。
05:08
对吧,所以说呢,咱们现在要对我们这个什么呀,对于我们的stream啊中它的一个L来进行一个处理,怎么处理呢?怎么处理,对吧?那么咱们现在呢,可以这样,对吧,这个是order y的stream,然后呢,去调它的一个for each led,对吧?那么咱们现在呢,是不是做了一个行动转换呀,对吧,那么拿到谁了,拿到了RDD对吧?拿到RDD之后呢,那么这个时候咱们现在呢,要看一下了,对吧,这个RDD它本身里边有个方法,对吧,叫什么呢?叫to什么什么是不是转换呀,是不是有一个to ddf和DS是不是都可以进行转换呀,但是对吧,这个东西呢,短的用不了,用不了那咱怎么办?导包是不是导谁port呢?然后接下来Spark点什么的,是不是有一叫places,然后接下来咱现在这里是把它给导导进来,那我问。
06:08
看见啊,我现把这名字改一改,改成AA,这个时候是再改成A呀,注意啊,这个SPA不要硬记,对这个东西咱们是导谁,是不是导到SPA对象,它里边有一个我们的半对象叫press,对吧?然后接下来找它的所有内容啊,对吧,然后接下来那么你现在可以去转换成date phrase,然后呢,那咱现在拿到DF之后,对吧,这个DF是什么?这个DF它也是一个我们这个对数据的封装,你可以理解成RDD,对,只不过呢,它这RDD又爆了,又又又套了一层,多了什么,是不是多了咱们这个对吧,二零表的结构啊,对吧,多了咱们这个裂的东西嘛,对吧,断裂的东西,那接下来那咱们现在把这东西对吧,这个R里本身放的是我的order we,然后也就是说它呢,其实除了我这order we的数据之外,它的在它上面,它根据咱们order we它的一个属性对吧,来转化为我的date frame它的一个啊这个列名的列名,然后接下来那么拿这数据之后呢,那我要保存了,怎么保存呢,这里边好像。
07:08
是不是有一个write这个方法呀,一个write的方法对吧?然后接下来那么咱现在的这个write方法里边,这里都有好多东西,就像什么呀,同学们看啊,咱们刚才在这里Spark这里边我读数据这个什么呢?这个read的方法,Read的方法它这里有什么是不如gson对吧?或者有什么呢?或者有什么咱们现在对吧,这这是个GDBC也这这这是不是也可以从我现在买so里读数据啊对吧?然后接下来这里咱们比较常用的,那是不是应该是我这个Jason什么什么对吧,Gson什么什么对吧?哎,那么咱们现在呢,在这里除了这个之外,好像还有一个吧,那个road对吧,那我当时在咱们这个,嗯,这个SPA里边,那么也给大家介绍过对吧,咱们现在呢这个东西对吧,这呢是我们这通用的一个我们这个加载方式,然后这块呢点right,那这块呢,应该是我们这个通用的一个保存方式,对吧,直接去调它的save,那这块呢是通的保存方式,这两个东西大家应该记住啊,同学们都。
08:08
那不管咱们现在用什么样子的一个类型的数据,那么咱们呢,在我封装方法的时候,那我都可以把这个东西给我拿过来封装到方法中去,他说道那不对呀,那你说我怎么知道我现在我要加载的是JS数据函是JDBC呢?那咱们在这里我还可以指定什么呀,我这里我在指定的时候,对吧?咱们现在在我们这read的时候,这里是不是有一个format可以指定格式啊,对吧,然后接下来去叫save,那你想你要这么写的话,咱们这个东西到底什么格式,你是不是可以通过参数给我传过来,对吧?所以说呢,转吧,他们叫通用的啊加载数据的方式,对吧,一般咱们在这里啊是这种方式通用的,那保存的话呢,那这也一样,同学们,咱们这里你也保存什么样的格式,对吧,那你也可以怎么办,你也可以用指定我到时候保存什么格式,然后到最后我调一个费这个东西,你是不是也可以给我通过咱们这个参数传过来,对吧?咱们现在呢,这块这个大家你要稍微回顾一下,如果这种印象一点没有了,那你应该回过头去看一下啊,你应该回。
09:08
我看一下,然后接下来咱们现在呢,主要针对我当前目前的一个这个这个场景来讲,对吧,那我现在呢,群教的一个right的方法,那么right的方法咱们现要干什么,咱们现在是不是应该要往我给my circleql保存呀,对第一种方式,那咱们的for me呢?然后接下来都要for me谁呢?GDBC对吧,因为my circle对他遵循GDBC协议,然后另外一个去调我们这个save对吧,来指定一下保存什么位置对吧?但是注意同学们如果说要是买SQ的话,你是不是得给我指定数据库连接的几要素啊,对吧,怎么去指定呢?那么咱们这里应该有一个我们的方法叫什么,是不是叫option对吧?叫option对,你可以给我指定嘛,对吧,你可以我指定,那么其实我现在如果说啊,你不考虑我现在的发通用性的话,那这会儿呢,你可以去改一改,你直接怎么办,直接write,那么直接保存什么形式,咱们这里是不是有JDBC,你可以通过这种方式来,对吧,你可以通过咱这种方式来对吧,然后接下来在咱们JDBC里边,你来给我指定你。
10:08
要保存到咱数据库的URL,然后保存哪张表里边,然后接下来保存到,哎,我们这里什么什么什么什么什么地方,对吧?哎,所以说咱们现在呢,其实可以指定一下啊,我这里也保存对吧?当你去调用我们现在它的DDBC这个函数的时候,那么这个时候呢,它这有一些说明啊,它可说明说什么呢?说我现在啊,这里边的参数是什么,对吧?大家看对吧,这里参数ul这个应该能理解,然后表明呢,对吧?那你应该也可以理解,然后接下来咱们现在呢,这里还有叫什么connection practice,是不是咱们连接的一些属性啊,对吧?那么如果说我现在呢,要就需要这些属性的话,那么你应该给我传一些什么东西呢?对吧,告诉你了,应该啊,给我传一些咱们这个标签和指径形式就是简值对对吧,那么在咱们这里边至少啊,你得有一个user,然后和什么和password,你这两属性你是不是得给我包含进来,还有什么呢?还有什么be size对吧,它来控制咱们现在对吧。
11:08
每次insert的一个函数P量处理的一个行数呗,还有什么呢?像我们这个isolation对吧,那这个东西如果要是大家接触过我们这个数据库的话,那么这个东西应该不陌生啊,应该陌生。听过这个吗?咱们现在如果要说我们这个数据库的话,那大家想一想,这个东西没有人会问你们对吧?比如说你要是问你们数据库的话,没有人会问你们说这个表怎么创建对吧?没有面试官问你们这些对吧,说这个东西怎么样去把表插数据,没有人问你对吧?那问的是的什么引擎啊,所以呢,优化呀,隔离级别呀,对吧?咱们这个数据库里面有几种隔离级别,为什么会出现这几种隔离级别啊,有什么脏毒,幻影毒,什么重毒,是不是对吧?那么咱们现在呢,这有这么几种隔离级别,是不是解决咱们现在这个这个现象了,对吧?那么有哪四种呢?读未提交,读已提交,然后呢。
12:09
还可重复读,还有一个是序列化图对吧,还有序列化图对吧?那么咱们现在呢,这四种隔离级别对吧?那么它呢,也可以通过来指定,那么这里对吧,有这么几种取值对吧?有几种取值,那么now就是不指定,不指定的一般会使用我这个数据库本身默认的,那哎买默认是什么。对,如果读orle呢,Or orle应该是这个啊,Or是这个对吧?那么咱现在呢,在咱们这里边同学们对吧,那么你现在呢,在咱这里对吧,那你这隔离级别呢,那你应该给我一个指定啊这这这这这个对吧,咱们现在对吧,来给我指定一下对吧,然后接下来那我现在呢,那咱们就把它指定一下呗,那你可以通过一个pro属性啊来给我指定,那你也可以通过什么呢?你也可以通通过一些我们这个参数指定这块指定的操作我不写,同学们来在这里,我现在呢,在指定的时候,我可以直接把这些东西拿过来对吧,拿过来对吧,把这个东西呢拿过来对吧,来看一看啊同学们,咱们现在呢,直接去掉它的一个我们这个方法对吧,这个呢,呃,指定我们这个当前这些属性,看刚才白,然后呢隔离级别对,然后这块呢,是我们这个这个分均数的这个分居数,然后这块呢,是我们这个驱动的这个驱动类。
13:28
对吧,然后这个驱动其实对吧,这个像买搜管啊,像这些东西可以不指定,但是像咱们现在肯定house呢,这个还是给指定一下更保险一些对吧,就说这个驱动力不指定的,他可以根据你当前这个URL,他去的这个推断说你这个什么数据库对吧,但是可令house一旦推断不出来,对吧,那这会还是指定一下更报靠谱一点对吧?然后接下来那么这块呢,是我们这个啊,它的一个URL,那么这个URL呢,它的通讯端口对吧,这个呢是8123对,然后接下来数据库对吧,是deforult,然后哪张表呢,就是咱刚才这张表,我要把咱刚才张表啊来查数据,对这个表名改一改对吧,零七啊这部这叫六对吧,二三短零加三是我下不了在练习的时候,对吧,我使用的对吧,好了,那咱现在呢,把列完事之后,大家想一想,那咱们当前对我这个双流照段这个处理基本上完事了,把这个拿到,拿到之后呢,咱们现在都开始把它保存到我这个clean house里面去。
14:28
但是同学们对吧,还没完事了,想一想,我们要想保证精准一次性消费从卡卡里边,那么这个时候咱们现在已经把它保存到我的click house了,对吧?那说明你现在对卡夫卡这个当前你读到的数据是不是已经消费完了呀?那你是得提交偏移量,所以说呢,那这块咱们现在干什么呢?在这里我现在要去保存我们这个或提交偏移量吧,提交我们这个偏移量对吧?那么如果提交偏量的话,咱们这里边应该都知道outside measure u点咱们的一个save outside主题,注意咱们现在可不是一次就可以搞定的,因为什么?因为咱们是双流啊,咱们读的时候是不是从两个卡卡的主题里边来读数据呢?对吧?那么你在写的时候,你是不是应该把这两个都改一下呀,对吧,所以说呢,那么咱们现在在这里,我呢,第一个那应该去拿咱们这个order in for topic,这是第一个,那么第二个呢,这个是我们的order in for group ID,那么第三个这个应该是我们的。
15:28
Order in inform outside range对,我们这个拿过来,然后接下来咱们再往下走,那么这块呢,把它改成order detail啊,Order detail,然后这个呢是order detaild,然后这个呢,是我们的order detail all outside啊order detail all outside range,然后把它偏量呢给保存一下好了,那这样的话,咱们这个呢,就完事了啊,咱们现在把数据保存click house对吧,这个就完事了,那么完事这个东西代码写完之后,咱们是不是得测试啊对吧?注意这个代码不难对吧?测试的流程比代码重要多了,来同学们,咱们把它测试一下对吧?那么你要想测试,那咱们在这里,那我是不是该把该起的东西给提起来呀,对吧?那目前呢,在我这机器上,那我先起的东西留哪些呢?对吧?来,咱们现在呢,来看一看,这里目前只有一个组keep板,对吧,还有我们现在隔离号的服务提起来了,对吧,那咱现在要起的话,首先卡不卡。
16:28
再提起来,然后呢,HDS这边再提起来对吧?HD其DS的目的是什么呀?因为HB维度是不是咱们现在在这呢,对吧?所以说呢,那咱们现在呢,来start h啊DFS是吧?把这个东西呢提起来,那么既然DFS要起,那么咱们这个h base是不是也要提起来对吧?所以说呢,咱们起完这个东西之后,要起我们的h base对吧,但是注意h base它这个启动前提对吧,那咱这这个DS把这应该起一下对吧?那接下来咱现在呢大然后呢,H被子把这个呢也取一下,然把里起一下,那把这个起完之后呢,大家想一想,咱们呢,在我们这里边是吧,别忘了咱们还还还还在在保存的时候,咱们上一个是不是还往ES保存数据啊,在订单里边上把那个数据保存ES里面去啊,对吧,因为咱们还对我这个当年订单的数据,什么首单,呃,什么首单呢。
17:28
对吧,他的一些什么年龄段呀,对吧,然后他的性别呀,到地区啊是吧,做了分析呀,对吧,哎,这块咱们ES呢,是不是也应该把它提起来,对吧?ES能提起来注意同学们,如果说啊,这个咱们现在呢,你的电脑性能稍微差一点的话,在提起来的边缘上,那你尝试着把这个功能注释掉。因为什么?因为咱们现在这个首单分析咱们曾经做过了,对吧?在咱们这里边我曾经首单分析对吧?这个东西咱们是不是已经,呃在在这呢,对吧?在咱们订单这里首单分析是不已经做过来对吧?那做完之后呢,那你已经看到效果了对吧?那我现在在拿做这这块的功能的时候,你没有必要再把ES保存了,也可以把这个功能呢给我注释掉啊,那注掉的话,咱们现在在首段分析的时候只是干什么,只是做一个维度关联,对吧,他就不再去往ES里面写数据了,对吧?那这会呢,会能提升一些性能啊,会能提升一些性能对吧?好了,ES起完之后来SQGPS,那咱们red这个东西更重要吧,对吧,Red这东西呢,咱也要起啊,所以说呢,来在这里我们呢,去来到o VT model,然后接下来咱们这里。
18:35
Ready这个下边到ready下边,呃,Ready server对吧?啊三是吧,啊ready啊三是吧,然后接下来咱们呢,应该是ready serve对,然后ready.call对吧,把这个呢给提起来啊,把它记起来,还有什么需要取的吗?哦,Markxwell是吧?诶markwell是吧,不错啊同学们,这个东西咱们现在呢是这这这个是吧,把它记起来是吧,把它记起来啊所以说一到后面感觉讲课特别轻松对吧,这个说来起来,你们告诉我半节课过去了对吧?然后咱们现在呢,注意把这些服务都提起来之后,咱们是不是就可以对吧,咱们现在是不是就可以去这个对吧,这个去什么了,去跑一下了对吧,去跑一下了对吧?呃,所以说呀,这个以后大家注意,这个东西可能以后就不需要你们自己做了,对吧啊,你像有些咱们平台对吧,直接该写他东西对吧,点吧点吧对吧,该写的都给写好了,对吧,后面你会学啊。
19:35
呃,那么咱们现在呢,把这个东西对吧,起完之后来到我这个程序中,对吧?咱程序里边是不是该起的也得起一起啊,首先第一个这个起记起来啊,这个东西呢,要记起来来,那么现在呢,把它给运行一下,那么当前我们现在这个APP它的主要作用干什么呢?应该是分流处理吧,对吧,从我们现在的这个DB下线M的这个主题里边把数据拿到,然后接下来做一个我们的分流对吧,根据表明分到不同的流上,然后接下来咱们现在呢,那这个东西它本身呢,对吧?这个把这流拿到了,拿到之后呢,咱们现在把这数据其实往上写,那其实写哪写的我们这个ods层,那么咱们现在呢,要从ods层拿数据对吧?到这是这是我在DW层代码对吧?然后接下来咱们现在呢,把这两个应用于提起来,一个是我们订单,一个呢是我们订单明细对吧,一个订单一个呢订单明细对吧,来在这里把他俩呢,都要给运营起来,那么。
20:35
它俩的作用注意啊,这个时候还没重呢啊,其实这里边它只是做维度的关联啊,只做维度的关联对吧?然后同时呢,对订单他做了一些统计啊,订单做一些统计,然后接下来那么咱们现在把这个维度关联好了之后,对吧?那么这个时候他呢,会把我们统计之后或者关联之后的对吧,这个订单订单明细相对的宽表给写回到我们这个啊这个卡夫卡对写回到我们这卡夫卡DWD层,然后接下来那么咱们再干什么呢?那么这个时候我要写一个我们这个order yp从DWD层把我们现在呢,这个数据的其实就是订单和订单明细它的一个关联车的维度数据给读过来,然后形成一个更大的一个宽表,其实这个就是我们双流兆到,并且计算了我们实物分摊,然后把这个程序呢,来右键去运行一下啊去运行一下。
21:56
来是吧,那么接下来咱们是不是就开始把这个程序,把这个模拟数据生成一下呀,来到我的OPT model,然后RP,然后下划线dblo,对吧,那我现在首先呢,去改一下我们的日期对吧,这个日期呢在咱们这里。
22:14
上次咱们还是一个月之前改的吗?11点是吧,还上个月改,还是上个月做这个事啊,我去时间过得真快,然后呢,咱们Java杠炸劲爆是吧,然后现在呢,去执行看一看咱这数据啊,可生成情况。那么设置完之后呢,咱们回到这里啊,主要看一下它对,主要看一下它对,那看一看咱们是不是可以把我们这个短链数据保存进去。这好像有了吧,对吧,好像有了是不是对吧?那有了之后呢,咱现在来来看一看,来看一看,呃,那么就得来到哪呢?是不是得到cleanhouse里面去啊对吧,然后接下来咱们s select的here,然后from p下划线,咱们这个order下划线,我们这个wide,然后的0523,然后接下来咱们运行对吧,来注意看那这个数据是不是有了呀,所其实我这么执行这种行为非常不好,同学们对吧,就是我现在这种行为其实非常不好,对吧,这个这个大家以后呢,就尤其你们大数据成员这种操作不要轻易做知道吧,对吧,因为你想想随便这个表是吧,你说如果说我像几百万条是不太好意思重新打数据啊对吧,说来源你属于水表结构对吧,假如说这里边上千万条数据,你是来兴一下对吧,那你想一想对吧,哎,你说说是等到执行完了,我再继续下一步操作对吧,那你等吧,对吧,所以说大概看一看多少条数据,25条,哎,你觉得咱验证一下这25条应该和谁一样。
23:50
对吧,应该和谁一致的是订单呢?Order in inform还是order detail order detail对吧,因为咱们是订单,订单明细对吧,去关联嘛,对吧,应该和订单明细对吧是一样,所以说呢,来到咱们这里边看一看咱们这表找谁呢?找我们这个order detail,看一看大概这里有多少条,25条对吧?诶,所以这个数据呢,咱们就过来了,对吧,这个数据就过来了,好了,这个呢,是关于我们现在啊,它的这个操作啊干什么呢?把我们这个数据保存到我们现在这可令house里面去了,对吧,保存可令house去了,呃,那保存clean令house这个功能呢,其实主要是什么呀,主要是他同学们对吧,主要就是咱们利用我们现在对吧,它的一个RDD,然后把我们这个数据转化成我们这个对吧,这个did frame,然后接下来通过did frame,它提供的我们这个right对吧,然后咱们直接呢,去把它保存到我们这个啊,这个GDBC对吧,它的数据库里边去,那其中呢,还有一个点,这个点刚才拿出忘了说了,对吧,那么这里呢,咱们保存的时候呢,它这里有一个叫C。
24:51
Model,这个c model当时咱们在讲的时候,应该对有不止这一个吧,啊,这应该也不止这一个取值了,默认取值是什么啊,C猫的word取值是什么?
25:04
单对默认取值报错啊,默认取值对如果存在的话就报错啊,然后接下来那么咱们可以什么呢?对可以覆盖啊,可以呢,咱们这个取消啊,或者是追加啊,或者追加好了,这是关于咱们这保存啊,稍微休息一会儿同学们。
我来说两句