00:00
啊,首先总结一下,呃,那么咱们上午呢,其实主要做的两大部分操作,一个呢是驱虫,一个呢像search来保存数据对吧,那咱们现在同学们一起来跟我想就行,也不用看代码对吧?也不用看代码,那么如果去重的话,大家想想咱们是不是应该是两种方式啊,对吧?第一种方式咱们是通过什么方式?就filter算子对吧?哎,就filter算子,然后呢,对我们现在采集到数据呢啊进行一个过滤对吧?那么咱们现在啊,在使用filter算子过滤的时候呢,大概的思路是这样的,首先你从我们现在采到数据里边,你可以把我们当这个日期拿到,然后呢,你可以把设备ID拿到,然后接下来那么你根据我们的日期,对,然后你到咱们red里边去找的Du,然后加湿器这个K啊然后呢,接下来你调咱们这个red,它里边一个ED的方法,看一看能不能把这个设备啊放到我的金额中去,对,那如果能放进去的话,那说明我现在第一次登录,如果放不进去的话,它给你返回零,说明以前已经登录过了啊通过这种方式呢,来完成一个去重。
01:02
是吧,但这种方式呢,咱们说不好对吧,为什么呢?因为我们虽然说啊,我们的reddi是从连接池获取的,但是呢,你采集个每条数据你都要从连接池获取一个咱们连接,这样获取连接的还是过于频繁,所以说咱们采用第二种方式,第二种方式什么呢?咱们是不是以分区为单位来对数据进行处理啊,那我们使用的算子是什么呢?是我们这个map partition啊,是外part,大家注意啊,那么这几个算子对吧?一个什么呢?一个是我transform啊,一个呢是我们这个transform啊,一个呢是我们现在这个Ford啊,一个呢是我们这for each part。啊,那么另外一个呢,是我map法对map法,那我问大家这个段子对你给我说一说,对。这个穿透干什么呢?
02:00
其实就是转换的,就是帮他DS转换成RDD对不对,然后这个for r DD呢。其实也是转弯,它俩完成功能其实一样,但是它不一样地方在这一个是转换算子,一个行动算子。啊,一个转化一个行动段子,我问大家这两个东西和咱分区有关系吗?到到目前为止和咱分区啊,一点关系没有对吧?然后这两个是不是才是以分区为单位对数据的简单处理啊,对吧?那么咱们说这两个它有什么区别呢?其实你想不管是map也好,还是for也好,它底层大家肯定都会有for循环,都会有迭代,Map的话,你想是不是也会把咱们集合数据一个给拿出来呀,它俩区别在什么地方?一个有返回值对吧?卖法离你是是得过一个,我当时以分区为单位进行处理,那么你处理完之后,你是不是得过一个集合,一个迭代器,这是作为咱们现在分析你处理之后的数据啊,但是咱FOR1是把的话,它不需要对吧,它就是个unit,对我给你现在当前分析数据,你对咱分析数据,那怎么处理怎么处理,你直接处理就行了,对吧,所以说卖不叫映射的嘛,对吧,你现在我给你,你应该把它转换一下,你到时候再给我,对咱free的话,我只对这数据进行处理,处理完之后你不需要给我什么返回,对吧,这块呢,大家注意这个算子啊,这个区别,然后接下来,那么咱们现在呢。
03:17
以我们的分区为单位对数据进行处理,那么我们这里呢,其实在过滤的时候,我们就是什么呀,我们就专门定一个我们这个集合,对,如果说我现在呢,这个是首次登录,我放到集合里边去,对吧,最后呢,给它返回对吧?这是关于我们现在这个驱虫这两种方式呢,大家对吧,都去练一练对吧,都去练一练对吧,然后接下来呢,那么咱们再往下,那么我去完虫之后呢,我驱完虫之后,那我现在要干什么,我要想把咱们现在去虫的数据啊,这个结果保存到I search里面去,对吧?那么如果你要往ais保存的话,那么这时候呢,那么咱们想我这时候肯定要批量操作,因为我不可能把采集到每条数据,然后一个一个的一条一条的去保存下去,把并去保存到S去行不行呢,可以,那就比如老师我现在我就我就不这么干,我就怎么做呢,我就单单啊,我就在保存的时候,对我就是for each r DD,然后RDD,然后在这里我也不什么for each part,我就for each,然后每次编历拿到一条数据。
04:18
对吧,然后接下来我去调用MYS这个U,它的put音带的方法,就单个去查行不行,行同学们,但这样的话是不是效率非常低呀,对吧?所以说呢,咱们要批量操作,那么如果批量操作的话,咱们在处理的时候,那么这块也是以分区为单位进行处理,那么这块我问大家你的代码以分区为单位进行处理,假如说我需要获取连接呀,或者获取什么的话,你们是把它写在哪,是写在咱们的r DD for partition的外边,就这个位置,还是写在这个里边呢?我问大家,就假如说我现在以分区为单位进行处理,我想在一个分区里面创建一个连接啊或者什么,对吧,那你说我是把串连接代码是写在这个位置对吧?写在这个位置还是写在咱们这个for each position这个里边的位置,这是一,这是二,你们写在哪写。
05:09
啊,你们写在哪写的?二里边注意同学们,因为什么,因为真正开始对分区,分区来进行处理的,是不是咱们现在这个算子对吧?所以说你现在这里肯定什么呀,就是肯定得写在咱们这个算子里边,对吧?这个你要注意一下对吧,那么另外一个对吧,那我要去对,如果说以前你们是这么讲的对吧,那没问题,如果以前你要不这么讲的话,我要稍微纠正一个东西,对吧,那我相信啊,以前你们肯定听过这么一个说法,什么呢?算子相关的代码在我们的ex执行,算子之外代码在driver端执行。是不是听过类似这样的话,对吧,但是有两个算子例外,有两个算子例外谁呢?咱们transform和for each r DB对吧,大家想想这两个东西,我现在这个是不是算子。对吧,然后这这个东西算不算我算的指定代码,它在哪执行的对吧?它在咱们这个driver执行的对吧?它在driver执行的对吧?那么这块呢,你要注意一下,诶咱们transform form也是一样,对吧?那么它真正你想它这个其实就相当做转换这个东西也在咱们这边完成的,真正在执行的时候,这个才是我们这个对吧,算其实你该因为这句话更准确的说法应该是RDD相关的,对这个算子对,因为你想这个东西我不用说RDD啊,它是不是在这要做转化RDD啊,所以其实在执行的时候它在哪在driver对吧,然后这块呢,里边这个操作才是在咱们这个exco对吧?这需要注意一下啊,这需要注意一下对吧,好了,那我现在呢,那如果要是想去分局为单位进行处理的话,咱们是怎么做的呢?对吧,原来啊,我们这个数据它这封装成了一个一个的这个这个杰森,然后接下来咱们现在呢,把它转换一下,对吧,把咱们里面Jason呢给它转换成一个个样例类。
06:49
之所以转换样力类,同学们是为什么呢?是以以前我们在操作ES工具类的时候,我们知道对吧,这个你要想往E里边插入操作,其实你可以给我传两两两个参数,你可以直接把咱们现在要执行的要put的这个文档,这个杰son字串你给我传过来,那么另外一个呢,你可以把这文档呢给放成样令传给我,所以说我们写代码的时候呢,我们直接是吧传递成我们的样例类,在这里呢做的转换,那么大家需要注意啊,那你现在把这个东西生成完之后呢,你来这看一看,咱们现在东西是不是都是对的对吧,尤其是什么呢?这里是不是有一个日期对吧,这里是不是个小时,这里分成是不是000对吧,这个东西对吧,你看一看这个东西是不是对的,对吧,因为咱们现在像这里边这个东西,那有可能同学们在写的时候,就比如说刚才我在这里在写的时候,Common common common common到这儿当来一下还是common,是不这个就获取不到了,或者说咱们比较容易出问题是什么呢?说同学忘了做这个操作,说是我从介词里面获取数据,直接上来接object。
07:49
就get string get string get转到下这些东西,它就获取不到对吧?然后接下来那么咱们现在呢,把这东西转了一个集合之后呢,我们呀,去调用我们现在的方法,这个方法那应该是在我们这个ES工具类里边,我们自己封装的方法,对吧?那么点进去对吧?点进去咱们在调查方法时候呢,传两个参数,一个呢是我们对要处理的这个批量数据,那么另外一个呢,是我们现在对你要把这数据插入到哪个索引里去索引的名称,对吧?那么其实你在操作的时候,同学们这里除了我们的所以这个名称之外,其实这里应该还有特别名呢,咱们这里这个模板是不是给咱取了两个别名啊对吧?所以说你看一看啊,咱们现在在这里,这个呢,是本身就我现在高亮的是咱们索引本身,那么现在呢,这个下边是根据我们的索引,它取的一个别名,上边是不是相当于对吧,把当前这个模板所创建的所有的我们的索引是不是都放在咱们这个一起了,对吧?其实取了一个边名对吧,那么你在操作的时候呢,你用。
08:49
拿别名来进行操作,效果也是一样啊,效果也是一样的对吧?哎,那么咱们现在呢,在这里,其实这块代码呢,本身不难是吧?我现在如果想这个往ES里面插入数据,那无非是对吧,先去获取客户端对象,然后接下来去直接exq的方法,然后接着关闭对吧?那么这块呢,只不过比较特殊什么的,是一个我们的Bo对吧?但是我们现在呢,在build之前我发现,那么如果说我现在直接build创建对象的话,那么我现在批量的每一条数据对吧?那么我应该怎么来达到,我会发现它里边有一个什么呀,叫a DD action这样的方法,所以说呢,那我们现在要把咱们单个的每一个我们现在对象对吧?然后呢,给它封装成一个我们现在单条的插入对象index,然后呢,把单条的这个插入操作,然后呢,放到我们的批量的操作里面去,然后最终去做一个执行对吧,这整体啊咱们上午对吧,关于我们现在这两个需求对吧,所做的事,一个呢是我们这个过滤对吧,驱重,那么另外一个呢,是往DS来保存对吧,把这个。
09:49
那我稍微停一下。
我来说两句