00:00
呃,那么大家会想到接下来我是不是直接在mango里边把把这三项直接传进去,是不是就可以做存储了,那另外大家会想到我这里边写,如果要是写这个movie df,先把这三个DF写进去啊,RADF,还有tag df,如果要只传这这三项行不行呢?我们对mongo操作的时候,假如说涉及到复杂操作的话,是不是光有那个表名,光有这个uri,我们这里配置好的这个uri可能还不行,对吧。我们是不是还必须要去,大家会想到这些对应的这个mango的配置是不是还应该传进去啊,对吧?所以这些东西还是需要的,那我们在这里是不是需要做一个做一个monggo conig的一个定义啊,我们需要这样的一个对象对不对?Monggo config,把我们定义好的这几项再包装一层,包装成我们这里的这个case class的类型,然后传进去,这是不是看起来就会更加的整齐一点,封装的更好一点,对不对?好,尽管我们在外面都已经定义好了,这里边我们还是多定义一下啊,这里大家多给大家复习一下,我们做一个影视定义。
01:25
声明一个影视的配置对象,这是做什么事情呢?定义一个mango con对吧?然后它的类型是不是就是我们定义好的样例类对吧?Monggo config里边的东西是什么呢?那是不是就是从configig里边拿出来mongo.uri另外还有一个是configig里边的mon go.db对不对?大家看是不是就是这两项配成我们定义好的样例类,然后包装起来传进去就可以了,那大家会想到我如果每次都要传的话,那看起来这个代码不够简洁,而且我们每一次如果有不同的这样的方法调用的话,那每一次都得传对不对?诶我们是不是可以把它定义成一个影视的配置参数,然后在这个函数里边把这个作为影视参数定义出来啊,之前大家讲过这个影视参数吗?讲过是吧?所以这个也就是多用一些这些不同的方法给大家,相当于复习一下以前讲过的内容,好,那么我们把这个mongo con fig已经定义出来之后,大家想一想,我们还需要什么东西呢?
02:41
我们要存到man里边,还应该定义出表名,对吧,还有一些表名没定义,所以这个我们再到这个数据我们这里边来找啊,哎,大家看这里边是不是定义了一些表名啊,我把这个copy过来也是当做常量定义出来。放在这儿啊,那大家看我们这里定义了一个叫做movie的collection,那这个是不是movie,那个数据集就存到这里啊,定义了一个RA,是不是RA存到这里啊,评分数据存到这里,标签数据存到taag里边啊,另外还有一个ES的要往里写的index,也叫做movie,这个我们先定义好,等一下ES操作的时候再用,对吧?啊,这就是这一部分内容,好,那接下来我们是不是就是要把这个函数做一个实现了。
03:30
万事俱备,只欠东风,只欠最后这一哆嗦,好,那么呃,大家看现在还报错,为什么报错?那因为我们这里实现的不对,对不对,那我们这里是不是要把对应的这个对movie df,它应该是一个data frame,对吧?然后另外还应该有GRDF也是一个data frame。还有tag df也是一个data frame,好,这是我们定义好的参数,另外我们还需要一个什么东西,是不是还需要一个影视参数啊?所以我们在这里in implicit,然后定义一个monggo config,是不是通过这种方式把它传入进来就可以了。
04:23
大家回忆一下我们的这个做法啊,它的类型是mongo config,对不对?那同样我们要往这个mango里边写数,是不是这个不需要有任何返回值啊,还是一个呃,Unit的返回对吧?好,那接下来。大家想一下,我们首先要做什么事情呢?我们这里边用这个最标准的方式给大家来写啊,因为我们要对mango做各种各样的操作,呃,那这里边我们首先新建一个mongo DB的连接,那这个新建连连接的时候。
05:02
创建一个叫做mango client的客户端,对不对啊,我们要连接到定义好的那个,呃,这个用用那个定义好的UI连接到我们的mango服务器上,那这个mango client怎么样去写呢?大家可以看一眼这个文档里面的写法啊。文档里边,诶不在这里,大家看这里啊,是不是就直接创建了一个monggo client啊,但是里边的写法有点特别,它是要把uri拿出来,要大家看是不是转换成这个monggo client uri啊,是一定要有这样的一句,对不对啊,所以大家看我就直接把这个copy过来啊,这写起来可能会稍微有点复杂,这个大家就是只要知道它怎么用就可以了,诶大家看我们这里没有,那可以把它需要把它引入一下,对不对。好,我们把monggo client引入,然后下边monggo client uri是不是也要做一个引入啊,好呃,引入之后大家可以看一下,就是这个是在在哪里放着,这是不是都是在开SPA下面的啊,呃,这是我们mongo的驱动对不对啊,所以这里边mongo client mongo client uri都在里边有,我们相当于就把这个uri传进去,呃,跟用这个uri建立了一个到mongo DB的连接,对吧?好,那接下来呃,这这这里给大家介绍的是最标准的操作啊,就是如果。
06:37
Mongo DB中已经有相应的数据库,那是不是应该先删掉啊,啊,就是我们要做这样的一个操作先删除,那当然我们这里的做法mango就很简单,它很简单粗暴,我们不管它有没有直接drop是不是就可以啊,没有的话也没问题,对不对啊,所以大家看一下这里边我们mongo的这个操作是怎么样做的?嗯,这monggo client做操作对吧?里边要传入什么呢?传入monggo config里边的DB,大家想这是不是有点像我们在mango命令行里边,客户端命令行里边是不是就是DB点什么呀?
07:25
我们当时去做处理的时候是不是DB.drop。呃,那个collection对不对,对吧?呃,大家会想到就是后面要加是不是还要DB点那个我们当前的那个就是C的名字啊,然后去drop collection,就把这个table drop掉了,那我们这里后边它不是直接点的,直接作为参数,然后把表名传入进去啊,它的写法就是这样的,大家要要要说为什么这么写呢?得到官网里面去看对不对,官网里面都有这个实现,大家照着能能把它做出来就可以,然后这就相当于是DB.movie对不对,然后后边要drop的话是不是点。
08:11
Drop。Collection啊,大家看是不是这一行对,所以这就相当于把这一行drop掉了。呃,那当然了,我们是不是应该把三个表通通drop掉啊?那我们这里就是mango rating也要drop掉,然后下面mango tag也要drop掉,对不对,先删掉再说,然后我们是不是就是将呃DF数据写入对应的呃mongo表中。呃,大家就会想到比方说第一个movie df是不是要写进去,我们说了用什么方式去写呢?Movie df d是不是可以用session里边的right方法对吧?好点right right里边是不是可以加一些option啊,Option给什么呢?是不是可以定义好它的U,这里我们的UI是什么?
09:22
是不是在monggo config里边有这个UI啊,对不对,从config里边拿参数对吧?然后有option还可以定义collection,就是你到底这个write方法要往哪里去write对不对?呃,这里我们要定义好往哪里去write呢?这是常量了,对吧,是不是monggo movie collection里边啊,往这里面去写。好,那接下来我们的mode用什么样的mode呢?Overri对吧,然后。
10:03
是不是还应该有一个format呀,对吧,这个right方法做一个这个format,这里边就是指定我们的呃,Spark CQ的这种这个连接程序了,我们这里指定的是mongo DB的Spark CQ,对吧?用这样的方式相当于就是通过mango和Spark的连接,是不是把这个Spark里边数据结构,然后写入到了mango里边啊,然后我们指定好它的uri,指定好要写入的表表名,然后写入进去就可以了,最后点C,呃,这就是我们整个写入到mango里边的一个过程,呃,大家看这个还是还是比较简单的对吧,就是只不过就是大家把这个过程梳理清楚就可以,哎呦,那有了这个。Movie比的这个例子之后,大家会想到RA和tag是不是完全一样啊,那就RADF写的时候是不是这里稍微改一下,我们把它写入到mongo RA里边就可以了,别的是不是完全一样?最后这个tag也是一样,这里是tag df把它写入到monggo tag collection里边去啊,这就可以了,对吧?那最后如果说大家会看到我们文档里边还给大家做了一些操作,做什么呢?还可以建索引对不对?大家看一下这个建索引我这里就不详细写了啊,大家看建索引的过程怎么建,是不是跟前面这个做法一样啊,跟前面这个对mango client的操作一样,对吧?它是不是还是mongo client,然后加上这个DB名,这是不是相当于DB?
11:52
然后后面参数给上这个表名,是不是相当于DB.movie对不对,然后不是后边是不是点create index啊,其实就是这样的一个方式,跟我们在命令行里面做的操作是类似的一个语法,然后它下边传入的是什么东西呢?是一个monggo DB object。
12:13
那大家想是不是就是把后边的这是一个什么东西。这是一个map对不对,对吧?大家看到这是一个map这样的一个写法,然后把它转换成了monggo DB的object,这是不是对于mongo而言就相当于变成了k value的一个类似于Jason的一个数据结构,对不对啊,在mongo里边,它把这个呃是类Jason的一个数据结构,有时候把它叫做be啊,所以我们就把这个东西直接copy过来就可以了,这里大家看到诶,Copy过来之后,大家看到这个monggo d object是不是也需要引入啊,对吧?我们看一眼啊,Monggo d monggo DB object它是不是也是在开SPA comments里边可以引入啊,有这样的一个东西啊,好,我们把这个索引建完之后就大功告成,最后是不是把这个mango client关掉就可以了,对吧?诶,这就是整个的一个。
13:19
过程,所以大家看是不是这个代码还是相对来讲比较简单的呀,呃,相对来讲就是难度不是很大,呃,那我们先我们我们先来看看这个效果怎么样吧,对吧?既然已经有了mango,呃,这里我们已经写完的话,那这个也可以打开了,呃,那这里面我们没有实现的内容,这个只要不报错也没什么问题,对不对?好,我把mango刚才应该已经提起来了,对吧?现在我show DBS,大家看现在是不是没有recommend这个数据库啊,好,那我就来直接跑一下,看看效果如何。Rock。
14:01
看一眼看起来是没什么错对吧?Exit,呃,With code0,所以看起来是没什么问题啊,好,我们来看一眼,哎哟,这个是看一眼mongo这里收,哎,那大家看到这里是不是多了一个叫做recommend的一个database啊,然后我们想要看它的内容的话,是不是得use它?然后大家看一眼,对show tables是不是里边有了我们想要的三张表,那当然这里边如果想看里边内容的话,movie.find对吧,我们可以去pretty哦,大家看这个内容非常的多,那里边的内容看起来就是我们定义好的这样的,对吧?它默认插入进去之后有一有一个ID作为主键,然后下面是不是mid name这个描述什么time long有很多对吧?有很多这些参数那。大家可能关心的是我的所有的数据是否都已经插入进去了呢?那我们是不是来看一下这里边一共有多少条数据movie,我们看一下有多少条数据movie数据应该不会太多,这是物品对吧?2000多条2791好,那在这里边我们怎么看呢?这个也简单,是不是可以直接count呀,对,Find count大家看2791没问题,应该是所有的都插进来了,对吧?那同样我们最大的那个表可能是大家能想到是什么吗?
15:33
是不是,呃,这个find啊,应该是RA,对不对,RA我们先看一眼它的结构,结构也没问题,Uidd mid score time step对吧,那它到底有多少条呢?诶这个比较多啊,没有10万条,这个4万多条,44000多条,44270,我们看一眼是不是全部加载进来了。这个就相对会多一点,44270没问题对吧?啊,所以这一部分数据我们都加载进来的话,当然大家可以再考察一下这个tag tag啊,大家看只有400多条,456,那我们看一眼这边是多少条呢。
16:18
哦,456本身数据是不是就少啊,啊,所以大家会发现我们这个,呃,本来基于用户标签是不是也可以做一个我们电影信息的内容提取,特征的一个提取,但是这个数据如果太少的话,这个效果可能就不太好,对吧,因为有一些这个,而且大家看到这个456条数据里边很多还是一个人对同一个电影呃做了很多个标签,对不对,还有是就是很很多人可能都是对同一个电影做出的这个标签,那如果要是把它在聚合之后,可能有效的标签就会特别特别少,那你如果基于这个去做特征提取的话,大部分是不是特征都没有啊,所以这个也就受限于这个数据,所以我们最后还是直接用这个movie里边的这个类别,是不是就最好啊,所以这就是我们的一个基本考量。
我来说两句