当前课程知识点:大数据系统基础 > 4. 处理框架 > 授课视频 > 4.9Pig Latin语法
下面我们看一下PIG LATIN的
基本语法是什么
回顾一下刚才例子里的
那个数据流
我们读了两个文件
对第一个文件做了Group by
然后做了一个generation
做了一个count
然后我们把两个数据源
Join在了一起
然后我们换了一个域来Group
然后最后我们对每一个Group
做了一个取前10的这么一个操作
这是我们的数据流
大家还记得在mapreduce里头
我们会把它写成个mapreduce
看起来非常的复杂
这个Latin代码要简单的很多
它基本上就是一步一步地
描述了这个数据流的这个图
先看头三步它是干什么
首先它读了一个文件
记着这是一个文件
它不是数据库的表
所以它仍然是一个非结构化的
我说这个文件它里头有三个域
那么它可以是空格 分格的
type分格的 逗号分格的
或者它本身就是一个
Hadoop里的()文件
它是有分格符的
我告诉它第一个域叫user
第二个域叫url 第三个域叫time
这个名字是
在这时候绑定在上面的
第二步我把它按照url
来group了一把
group的结果
放在这个数据集里头
叫做gVisits
然后这个数据集最有意思的是
这个数据集可以在这里用
所以我们看起来这个好像就是
它重新生成了这么一个表
但这个表就可以在这里用
所以这个生成的这个表里头
每一项我们生成的这样一个对
这个对里头第一个是一个url
第二个是一个count
这个count是由用户定义的
一个函数
至于怎么算
你用户可以在别处再把它定义上
反正它是一个技术
所以它生成的东西
就是一个这样的表
visitCounts这个表
就是有两个域
第一个域是url
第二个域是一个count
这是头三步
之后我们读了另一个文件
一样的
load了这个文件
这个也是一个半结构化的
或者是非结构化的文件
但是我们管第一类叫url
第二类叫category
第三类叫pRank
我们把它定义了三个名字
我们管这个新读进来的
叫urlInfo
然后我们用这个表和这个表
这是两个表的名字
urlInfo visitCounts
visitCounts urlInfo
我们把这两个表Join在一起
那怎么Join
我们是用这个表上的url这个域
和这个表上的url域
我们利用这两个域
把它Join在一起
这个Join这个操作在数据库里
很常见
那我就说两个url一样的
我就把它放在一行里
所以它生成了一个新的表
叫visitCounts
之后这个visitCounts
又是一个新的表
这个新的表我在这个
新的表group一下
我按照category来group一下
我等于把它重新地
排列了一下顺序
重新地分了一下组
之后我根据这个分好了组的
我对每一组foreach
对每一组我生成
我调用了这样的一个函数
这个也是一个用户定义的函数
这个函数涉及两个域
一个是计数
然后这个是总共做了多少个
所以它是每次取top ten
每次取前10个
然后它生成
所以这个topUrls这个东西
只生成了一列
这一列就是这个top
这个函数的输出
那么就是一个url
它每次只输出10个
对每一列只输出10个
所以这就是每一个category的
最后的topUrl
这个代码看起来
它就比较简单了
不能说非常简单
因为它毕竟不是(03:11)
但是它也比较简单
它跟我们刚才画的
那个数据流程图是非常接近的
它没有任何的实线
它只是告诉你
说我要从哪里读到哪些数据
我在哪些数据上做一些个
已经固定的操作
比如说叫Join
这个generate调一个函数
比如说叫foreach我再iterate一遍
整个再迭代一遍
或者我再group
按什么东西组合一遍
最后我们把这个结论存起来
这也是一个很简单的操作
那么看到这些个程序
它有几大特点
第一 它这个不是数据库
它操作是直接作用于文件的
你把文件读进来
你可以把文件的不同的域
动态的叫一个名字
你可以动态选择一个Schema
你不是绑死在
这个数据存储什么样
和你怎么把它读进来
读进来是什么样
这是你自己定义的
是在读的过程中生成的
这个Schema
而不是一个绑定的Schema
因此这个东西还是致力于
处理这里非结构化的数据的
而相比之下数据库
那么它因为它数据存储
就必须是按列存储的
这个或者是这个
它是按列的这样一个表格
它是有一个严格的Schema
这个数据库的这种
Schema的定义是非常的严格的
所以这个时候你不容易
把它变成另外一种数据格式
所以这种东西
它是针对维线操作
它是更适用于big data的
那么数据库里头还有一个问题
就是数据库里头一般来讲
它不让用户定义一些个函数
用户可直接
函数在数据库里你可以定义
但是这个东西都是用一些
很奇怪的方法来进去了
数据库一般来讲
还是跑的是(04:46)
但是这个pig里边
用户定义的函数就是一等公民
它叫UDFs
User Defined Functions
所以UDFs可以用于
各种构造的过程
你可以在load里头
就是说我怎么把一个文件
转化成我要的Schema
你可以在存的过程
你说我写进去的时候
我要把数据怎么转化
包括Group Filter Foreach
在这里头你都可以定义
这个数据进来之后
我是怎么处理它的
这个就像你定义
mapFunction的方式是一样的
所以你可以在任何的地方
你定义一个Function
然后这个Function里对数据
进行一个操作
然后再定它的标准的这种
像foreach 像group这样的
标准的操作符
所以你的函数是一个一等公民
它可以在任何地方
都跟它自定义的函数是一起动的
-授课视频
--什么是大数据
--大数据典型应用
--大数据的特点
--大数据技术体系
--大数据生态系统
--大数据技术挑战
--课程内容
-1. 绪论--Quiz 1
-授课视频
--2.2并行化理念
--2.9计算虚拟化
-2.云计算--Quiz 2
-授课视频
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
-3.文件存储--Quiz3
-授课视频
--4.13类似框架
--4.14章节总结
-4. 处理框架--Quiz4
-授课视频
-5.内存计算--Quiz5
-授课视频
--数据副本及一致性
--节点本地数据存储
-6. NoSQL--Quiz6
-授课视屏
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
-7. 流计算--Quiz7