Hadoop 权威指南学习笔记(十)

                                         关于Pig

       pig为大型数据集的处理提供了更高层次的抽象,Pig 是作为一个客户端应用程序运行的。

运行pig三种方法:
1. 
pig   script.pig         2.在Grunt 环境中,也可以通过 run exec 命令运行 Pig 脚本。  3.也可以在 Java 中运行 Pig 程序。

Pig 对复杂、嵌套数据结构的支持也使其不同于能处理平面数据类型的 SQL。几个支持在线和低延迟查询的特性是 RDBMS 有但 Pig 没有的,例如事务和索引。和 Pig 一样, Hive 也被设计为用 HDFS 作为存储。但是它们之间有着显著的区别。 Hive 的查询语言 HiveQL ,是基于 SQL 的。任何熟悉 SQL 的人都可以轻松使用 HiveQL 写查询。和RDBMS 相同, Hive 要求所有数据必须存储在表中,表必须有模式,而模式由 Hive 进行管理。但是, Hive 允许为预先存在于 HDFS 的数据关联一个模式。所以,数据的加载步骤是可选的。和 Pig 一样, Hive 也不支持低延迟查询。

pig 语句结尾加“;”号。Pig Latin 程序执行时,每个命令按次序进行解析。如果遇到句能错误或其他 (语义)错误,例如未定义的别名,解释器会终止运行,井显示错误消息。解释器会给每个关系操作建立一个逻辑计划。逻辑计划构成了 Pig Latin 程序的核心。让 Pig 开始执行的是 DUMP 语句。此时,逻辑计划被编译成物 理计划,井执行。

表达式

Pig 有四种数值类型: int,long,float,double。Pig 的这种模式声明方式提供了很大的灵活性。这和传统SQL 数据库要求在数据加载前必须先声明模式的方式截然不同。设计 Pig 的目的是用于分析不包含数据类型信息的纯文本输入文件的,因此,它为字段确定类型的时机不同于 RDBMS 也是理所当然的。

计算函数:

计算函数(Eval function),计算函数获取一个或多个表达式作为输入,井返回另一个表达式。

过虑函数(Filter function) ,过虑函数是一类特殊的计算函数。这类函数返回的是逻辑布尔值。

加载函数(Load function) ,计算函数获取一个或多个表达式作为输入,井返回另一个表达式。

存储函数(Store function) ,存储函数指明如何把一个关系中的内容存到外部存储。

用户自定义函数

       为了使用新函数,我们首先进行编译,井把它打包到一个 JAR 文件,然后,我们通过 RIGISTER 操作指定文件的本地路径(不带引号) ,告诉 Pig 这个 JAR 文件的信息,Pig 把函数名作为 Java 类名,井试图用该类名来加载类以完成函数调用。(这也就是为什么函数名是大小写敏感的,因为 Java 类名是大小写敏感的。),使用Grunt将包加入到搜索路径中去,invoker可以在pig脚本中直接调用java方法。

过滤数据

FOREACH.. .GENERATE 操作用于逐个处理一个关系中的行。它可用于移除字段或创建新的字段。嵌套 FOREACH... GENERATE 语句必须以 GENERATE 语句作为最后一层嵌套语句。STREAM 操作让你可以用外部程序或脚本对关系中的数据进行变换。COGROUP 为每个不同的分组键值生成一个元组。每个元组的第一个字段就是那个键值。其他字段是各个关系中匹配该键值的元组所组成的"包" (bag) 。第一个包包含关系 中有该键值的匹配元组。同样,第二个包包含关系中有该键值的匹配元组。

COGROUP 用于把两个或多个关系中的数据放到一起,而 GROUP 语句则对一个关系中的数据进行分组。GROUP 会创建一个关系,它的第一个字段是分组宇段,其别名指定 group. 第二个字段是包含与原关系。有两种特殊的分组操作: ALL ANY. ALL 把一个关系中的所有元组放入一个包。All 没有关键词 BY. ALL 分组常用于计算关系中的元
组个数, 关键词 ANY 用于对关系中的元组随机分组。它对于取样非常有用。
 
如果想设置输出的顺序,可以使用 ORDER 操作按照某个或某几个字段对关系中的数据进行排序。默认的排序方式是对具有相同类型的字段值使用自然序进行排序 (natural ordering) ,而不同类型字段值之间的排序则是任意的、确定的。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值