00:00
同学们,我们之前啊,把那个data frame操作咱们示了一下,呃,最起码呢,咱们发现了S确实要比咱们那个R发起来要简单多,对吧?那咱们接下来呢,咱们从件的角度呢,把这个data frame咱们过一些,咱们一块来看,呃,首先说Spark当中的data API我们frame,而不用时生表,那么也就意味着我们可以通过一些API的方法来问我们的data frame是没有任何问题的啊,那么我们的data frame它是一个数据的抽象,那我们该如何来构建呢?他说了有我们的不同的方式,第一种叫s bug的数据源,第二个和一个。已经存在的RDD做转换,那咱们之前学Spark不就RDD吗?你把DD就可以转换成我们的什么Spark circle,对吧?诶把data frame创建出来,还可以从have table进行查询返回,那么你的have本身啊,我们说之前就跟Spark是有一个集成的,对吧?那现在Spark独立出来了,但是跟have呢,也是可以连接的,没问题啊。
01:11
呃,首先我们来看我们的第一个,它说从10SPARK数据源进行创建,那么首先它里面要支持创建文件的数据源格式,那这个咱们之前说过了,咱们有一个叫什么呢?叫Spark,是那个我们的s Spark的环境对象,然后它里面呢,会有一个叫read,这个read呢表示是一种你的功能是读取功能,对不对,然后呢,我们按个type键啊,Type键,Type键当中大家会发现在咱们当前的场合下,最基本的操作呢,就是我们的什么JDC杰森这样的一些操作啊,那么我们现在呢,就可以去用一下,比方说我们就写上咱们叫做杰森,那么你写杰son的时候要传一个路径,这个咱们之前说过了,在这里呢,我们会有一个咱们叫做什么呢?Input,好input啊。然后呢叫u.Jason然后呢,我们给他一个名称,咱们叫做DF,叫data frame,我简写一下回车,回车以后,那这个时候呢,在我们的这个位置会得到一个我们的data frame,对吧?诶好,那么然后呢,它后面会有一个结构,咱们前面讲过了data frame啊,它是我们SPA circle当中的一个抽象,它更关心的是我们的结构,那这里呢,就会有个age,有个叫username,那在我们给大家准备的这个input当中,我们打开,打开以后我们点开啊,咱们点开,那这里面呢,就会有username和那个年龄对吧,这就叫结构,但是呢,它显示的时候呢,是把age放前面,这个age呢,它会按照字典顺序呢,把这个属性放前,这是没有问题的啊,但是它的类型啊叫big in。
02:47
嗯,这个BD int呢,我们说啊,其实是因为咱们从文件中读取数据,它不知道这个文件数据的一个大小范围,所以呢,它就没有办法说什么整个int呀,Bit呀,Short之类东西,对不对,怎么办?他给了一个我们的大整形啊,就是一个big int就是一个大整形数据,其实啊,它类似于咱们的那个long啊,这个理解一下就可以了啊,然后呢,他得到的就是一个我们的什么data frame就是它了啊好,咱们接着呢往下啊,下面他就说了,他说如果从内存中获取数据,Spark是可以知道数据类型具体是什么的,那如果是数字,那么默认就为int处理,但是呢,如果你是从文件中来读取咱们的数字的话,那么是不能确定它是什么类型的,因为文文件中嘛,你那个数字是可长可转的,对吧?啊,所以呢,它用big in来接收,可以和long类型转换,但是和int类型是不能转换的,记住它是一个大正型啊。
03:41
然后下面呢,是一个展示的结果,这个展示的结果呢,在我们这个位置就是DF点啊,我们的一个它回车,回车以后它就会把数据展现出来,没有任何的问题啊好,然后呢,我们接着呢往下他说了从RDD进行转换,包括从have表格进行查询,这个咱们后面再讲,咱们现在先不看它啊,接着往下,下面呢是circle口语法,什么意思呢?我们要想写circle口文,你得遵循它的一些语法规则,对吧?那么它这里面呢,会有一个说DF,这个DF当中,它会创建一个临时表,这个咱们说之前说过了,你要想写搜口文的话,你首先得有一张表,你连表都没有,你怎么写文呢,对不对?所以啊,它这里面就有方法啊,咱们之前给大家演示的方法呢,叫做DF.create叫temp,咱们的view对吧,还记得吗,同学们。
04:33
然后呢,写上啊,咱们叫做UR,你这么写没有任何的问题,但是如果你多次创建的话,就有可能会重复,所以呢,它这里面其实提供了另外一个方法叫or replace time view,诶,所以它有这么个操作,那这里呢,我们就写上了,啊来把这个呢去掉,咱们叫create啊,写上一个or按个type键,咱们叫做replace,咱们叫做type view,来这么写,然后写上一个咱们的U,写完之后回车,你就等于把这个数据源给它准备好了,那我现在就从这个数据源当中,诶来查找数据,这个时候呢,我们要有一个spark.circle然后写上一个啊来咱们写上一个,嗯,咱们叫做lark的星,哎,From咱们的U,因为你的这个地方有个uder,那这个表明呢,这个视图的名称就叫uder是吧,然后呢,我们给他来啊,嗯,直接展示一下吧,回车。
05:32
展示以后你会发现跟之前的结果完全相同,是因为你全查吗?如果你现在不想全查的话,把星号改一下,改成比方说我们的这个叫做A啊回车,那么我们的年龄就出来了啊,这个咱们之前都是演示过的,所以啊,它这里面可以这么写,没问题啊,但是呢,我们刚才啊,既然会发现呢,其实我们这个叫做什么呢?叫view,那么所谓的view是啥意思呢?在咱们关型数据库当中,其实是有table和view的区别的,咱们table叫表,View叫视图,那么一般视图是什么意思呢?其实呀,视图就是一个查询结果集,把它转换成了一个特定的一个什么,我们的视图结构是这样的啊,所以咱们的视图是只可以查而不能改的,同学们,那个table可以增加,可以修改,可以删除,可以查询,对不对,可以增删改查,但是我们的view它只能查询,不能做别的事儿,为什么呢?你的数据源在data frame里面,如果它对应的这个视图你能改的话,那数据源的。
06:32
数据不也就跟着变了吗?对不对,所以这个事情肯定是不行的,对吧?哎,这个事情咱们要了解一下啊,好接着往下。呃,下面的这个地方,他说了,我们默认情况下,普通的临时表是session范围内的,什么意思啊,就是你当前跟我们的Spark啊做一个连接的话,它是一个绘画啊,是一个绘画,那么这个绘画呀,它是有个范围的,就意味在这个范围当中,你的数据保存没有问题,是可以共享数据的,但是如果你想换一个我们的范围啊,就比方说我创建了一个新的一个绘画,新的连接,那么这个时候你之前创建的那些表啊,可能就访问不到了,什么意思呢?大家看我刚才这样不是创建了一个UR吗?但这个UR啊只在当前的连接下是有效的,那如果你换个连接就不行了,那什么叫换个连接呢?大家看我们Spark点,它有一个叫做什么呢?New,咱们叫new session,就是一个新的会话,新的连接,然后呢,你点circle,然后在这里面我们写上叫select的,我们的age啊,咱们叫from y,然后再来我们展示。
07:40
是以后啊,写错了,嗯。咱们这个地方想想它啊,回车回车以后大家看一下,这个时候我是换了一个我们的连接,对吧?哎,咱们是换了一个连接啊,咱们可以看一看。好了,同学们看,已经报错了吧,哎,这个时候已经发生了错误,他发生了一个什么错误呢?他说了啊,咱们的这个地方叫做table or will not found,就说明这个U啊,我找不到,但是其实你会发现,同学们看一下你在这个地方能不能找到,可以的,但是我刚才用的这个叫new session,我现在是不是能找到啊,但是如果我来一个new session,你们看一下是不是就找不到啊,那就找不到,为什么?很简单,就是因为啊,你跨越了连接,跨越了三分,那就不行,那怎么办呀?我就想在不同的连接当中都可以访问这张表,难道不行吗?其实是可以的,大家看,我们叫DRF回车,它会有个data frame,我们叫DF,咱们叫做DR,咱们叫做什么呢?Create,咱们叫做or,咱们叫replace,大家会发现其实里面有个什么东西啊,叫global啊,咱们叫global,你把这个叫global type。
08:57
那么这个时候啊,他就会在全局范围之内,然后呢,去给他创建一张表,哎,咱们不叫eo的了,咱们叫emp吧,员工啊,好,我们来回车,回车之后,那么这个时候我们干什么呢?我们在这里给它来,咱们叫spark.new咱们的session,然后点咱们的circle,好,我们写上咱们叫select星from,咱们叫EP。
09:24
好,Emp,但这个时候啊,同学们需要注意了,因为你把这个我们的EP啊放在了一个特殊的范围之内,那么你直接这么访问是不行的,你需要加上一个我们什么东西啊,大家看一下,它有一个叫global temp,再加一个我们的前置的一个路径访问啊,说了就跟表空间的感觉是一样,是吧?所以呢,我们写上啊,咱们叫global啊来,然后写个点啊,写上一个点你的这个global啊,它里面就表示是从全局范围中去找,这里还得写个下划线,叫做temp,诶叫做啊好了,然后呢,我们点一下我们展示回车,回车以后大家看是不是有了,之前肯定没有,为什么呢,连不上,现在呢,你把它保存到了全局范围之内,加上一个限定的名称,那这个时候就可以使用了,所以这是我们circle所需要注意的地方。
10:17
好了,咱们接着呢,往下啊往下下面呢,就是我们的它了啊行这个呢,我们把一个circle的语法简单的介绍一下。
我来说两句