pig学习日志

pig中支持的数据类型
int 32位整数
long 64位整数
float 32为浮点
double 64位浮点
chararray 字符串 UTF-8 格式
bytearray blod二进制
boolean 布尔
datetime 时间
tuple 数组,如:(19,2)
bag 数组的数组,如:{(19,2), (18,1)}
map key,value组合的结构列表,如[open#apache]

Schemas
Schemas是指pig script的数据结构,按照原数据列的数据类型来定义,你必须定义准确才能开始你后面的处理工作, Schemas在as语句里边定义,其中LOAD, STREAM, and FOREACH 后面都可以接as语句。

pig关系运算符

LOAD
将数据从文件系统中载入,返回一个bag,
语法:
LOAD 'data' [USING function] [AS schema];
data指文件的路径,也可以指定文件夹,这样输入就变成该文件夹下面的所有文件,hadoop中的组件都是这样的。
USING function 默认是USING PigStorage 以'\n'为行的划分以'\t'为列的划分。可用的还包括BinStorage,JsonStorage,HBaseStorage以及一些用户自定义函数等等
AS schema 是根据'data'的数据结构来定义的。需要指定正确的列数以及数据类型。格式为:(f1:int, f2:chararray, f3:datetime);如果你不指定所有列都会被识别为bytearray.且没有名字.
列数太少,多出来的列不处理,列数多了全部填充null.


GROUP 与 COGROUP
分组数据,2者功能一样,为了可读性GROUP处理一个关系,COGROUP处理多个.
语法:
alias = GROUP alias { ALL | BY expression} [, alias ALL | BY expression …] [USING 'collected' | 'merge'] [PARTITION BY partitioner] [PARALLEL n];
USING 'collected' | 'merge'] collected操作对象为一个关系的时候用。merge多个关系的时候用。都是为了让处理过程集中在map阶段,但不是所有处理都可以使用。详细参考文档
BY expression指定分组依据支持数组类型
PARTITION BY partitioner 指定一个自定义的java类的完整路径。我理解的是自定义map结果的分割方式,一般情况下我们按照key的值分组,然后分给reduce。在这里我们可以实现按不同方式分组。
PARALLEL n指定reduce的并发数


FOREACH
FOREACH提供基于列的数据生成数据的转换功能。可以用$i表示列,i从0记起。
例如:
DUMP A;
(1,2,3,2,4)
(2,6,7,6,7)
X = FOREACH A GENERATE $0, $2;
DUMP X;
(1,3)
(2,7)

STORE
将数据保存到文件系统中。
语法:
STORE alias INTO 'directory' [USING function];
alias指定义的关系的名字
directory输出目录,必须每次都是全新的

STREAM
将数据发送到一个pig脚本或者其他程序处理,并且返回一个关系
语法:
alias = STREAM alias [, alias …] THROUGH {`command` | cmd_alias } [AS schema] ;
`command` 一条linux shell命令。
cmd_alias 声明的命令,声明语法如: DEFINE mycmd `stream.pl –n 5`;
脚本输出的数据按照\n,\t分割的模式处理。STREAM会将所有该关系的数据以字符串形式传递给脚本,数据会非常大。执行速度会受一定的影响。

posted @ 2013-09-30 11:24  nosqlcn  阅读(466)  评论(0编辑  收藏  举报