个人目前理解pig是对mapreduce的一种封装扩展,使写mapreduce简单化,可维护性更高一点,可透明性更清晰一点,操作数据更简单一点吧。
1. Pig中的模式
pig中模式就是说pig数据的数据格式是什么样的。
比如当执行
grunt> describe a;
a: {c1: int,c2:int,c3: int}
这个时候就证明知道数据是什么模式的,
grunt> describe b;
Schema for bunknown.
这个时候的模式就是未知的,
在这儿我想就应该可以看到有模式和无模式的数据提示了。
Pig的模式是非常宽松的,就像它的宣言‘什么都吃’,用户定义了模式,pig会使用这个模式,可以进行预先错误检查,和执行过程的优化等操作。但是如果用户没有指定模式,pig会做最合理的猜测。
2. Pig数据结构
数据结构用来可以指定列的类型或者对象的类型
简单类型 | 描述 | Example/声明实例 |
int | Signed 32-bit integer | 10 as(c1:int) |
long | Signed 64-bit integer | Data: 10L or 10l as(c1: long) |
| ||
Display: 10L | ||
float | 32-bit floating point | Data: 10.5F or 10.5f or 10.5e2f or 10.5E2F |
| ||
Display: 10.5F or 1050.0F | ||
double | 64-bit floating point | Data: 10.5 or 10.5e2 or 10.5E2 |
| ||
Display: 10.5 or 1050.0 as(c1: double) | ||
chararray | Character array (string) in Unicode UTF-8 format | hello world |
bytearray | Byte array (blob) | as(c1: bytearray)默认 |
boolean | boolean | true/false (case insensitive) |
datetime | datetime | 1970-01-01T00:00:00.000+00:00 |
Complex Types复杂类型 |
|
|
tuple | An ordered set of fields. | (19,2) |
bag | An collection of tuples. | {(19,2), (18,1)} |
map | A set of key value pairs. | [open#apache] |
3. 数据类型转换
pig的数据类型的允许转换
from / to | bag | tuple | map | int | long | float | double | chararray | bytearray | boolean |
bag |
| error | error | error | error | error | error | error | error | error |
tuple | error |
| error | error | error | error | error | error | error | error |
map | error | error |
| error | error | error | error | error | error | error |
int | error | error | error |
| yes | yes | yes | yes | error | error |
long | error | error | error | yes |
| yes | yes | yes | error | error |
float | error | error | error | yes | yes |
| yes | yes | error | error |
double | error | error | error | yes | yes | yes |
| yes | error | error |
chararray | error | error | error | yes | yes | yes | yes |
| error | yes |
bytearray | yes | Yes | yes | yes | yes | yes | yes | yes |
| yes |
boolean | error | error | error | error | error | error | error | yes | error |
|
参考:http://pig.apache.org/docs/r0.11.1/basic.html#cast
还有一些基础运算的操作在官方的参考手册中有好多的例子就不写了,原来写博文也很累~~~~(>_<)~~~~ ,现在感觉好羡慕那些一直坚持写了好多篇的NB人物们啊。
http://pig.apache.org/docs/r0.11.1/basic.html#artichmetic-ops
Pig latin
Pig latin 是一种数据流语言,每个处理步骤都会产生一个新的数据集,或者一个新的关系。
一个Piglatin程序是由一组语句组成,一个语句可以理解是一个操作,或一个命令等。
Pig latin中的变量是区分大小写的。比如所有的关系,和字段等都是区分的,但是pig中的保留字是不区分的。Load 和LOAD是一样的。
单行注释 --注释区
多行注释/*注释区*/
语句
在Pig Latin程序执行时,每个命令按次序进行解析。如果遇到句法错误或其他
(语义)错误,例如未定义的别名,解释器会终止运行,并显示错误消息。解释器会
给每个关系操作建立一个逻辑计划。逻辑计划构成了Pig Latin程序的核心。解释
器把为一个语句创建的逻辑计划加到到目前为止已经解析完的程序的逻辑计划上,
然后继续处理下一条语句。
特别需要注意的是,在整个程序逻辑计划没有构造完成前,Pig并不处理数据。
函数
Pig中的函数有四种类型。
计算函数(Eval function)
计算函数获取一个或多个表达式作为输入,并返回另一个表达式。MAX就是
一个内置表达式的例子,它返回一个包中项的最大值。有些计算函数是“聚集
函数”(aggregatefunction),这意味着它们作用于数据的“包”(bag),并产生
一个标量值(scalarvalue) o MAX就是一个聚集函数。此外,很多聚集函数是
“代数相关的”(algebraic)。也就是说这些函数的结果可以增量计算。在
MapReduce中,通过使用combiner进行计算,代数函数的计算效率可以提高
很多。MAX是一个代数函数,而计算一组值
“中位数”(median)的函数则不是代数函数。
过滤函数(Filter function)
过滤函数是一类特殊的计算函数。这类函数返回的是逻辑布尔值。正如其名,
过滤函数被FILTER操作用于移除不需要的行。它们也可以用于其他以布尔条
件作为输入的关系操作,或用于使用布尔或条件表达式的表达式。IsEmpty
就是内置过滤函数的一个例子。它测试一个包或映射是否包含有元素。
加载函数(Load function)
加载函数指明如何从外部存储加载数据到一个关系。
存储函数(Store function)
存储函数指明如何把一个关系中的内容存到外部存储。通常,加载和存储函数
由相同的类型实现。例如,PigStorage从分隔的文本文件中加载数据,也能
以相同的格式存储数据。
Pig内置的函数
类别 | 描述 |
计算 |
|
函数名称 | 描述 |
AVG | 计算包中项的平均值 |
CONCAT | 把两个字节数组或字符数组连接成一个 |
COUNT | 计算一个包中非空值的项的个数 |
COUNTSTAR | 计算一个包的项的个数,包括空值 |
DIFF | 计算两个包的差。如果两个参数不是包,那么如果它们相同,则返回一个包含这两个参数的包;否则返回一个空的包 |
MAX | 计算一个包中项的最大值 |
MIN | 计算一个包中项的最小值 |
SIZE | 计算一个类型的大小。数值型的大小总是1。对于字符数组,它返回字符的个数;对于字节数组,它返回字节的个数;对于容器(container,包括元组、包、映射)它返回其中项的个数 |
SUM | 计算一个包中项的值的总和 |
TOKENIZE | 对一个字符数组进行标记解析,并把结果词放入一个包 |
IsEmpty | 判断一个包或映射是否为空 |
PigStorage | 用字段分隔文本格式加载或存储关系。每一行被分为字段后(用一个可设置的分隔符(默认为一个制表符)分隔),分别对应于元组的各个字段。这是不指定加载/存储方式时的默认存储函数 |
BinStorage | 从二进制文件加载一个关系或把关系存储到二进制文件 |
BinaryStorage | 从二进制文件加载只包含一个类型为bytearray的字段的元组到关系,或以这种格式存储一个关系。bytearray中的字节逐字存放。该函数与Pig的流式处理结合使用 |
TextLoader | 从纯文本格式加载一个关系。每一行对应于一个元组。每 |
PigDump | 用元组的toString()形式存储关系。每行一个元组。这 |
HbaseStorage | 从Hbase 加载数据 |
pig中的关键字
A-Z排序 | 保留字 |
A | AND, ANY, ALL, ARRANGE, AS, ASC, AVG |
|
|
B | BAG, BINSTORAGE, BY, BYTEARRAY |
|
|
C | CACHE, CAT, CD, CHARARRAY, COGROUP, CONCAT, COPYFROMLOCAL, COPYTOLOCAL, COUNT, CP, CROSS |
|
|
D | DATETIME, %DECLARE, %DEFAULT, DEFINE, DESC, DESCRIBE, DIFF, DISTINCT, DOUBLE, DU, DUMP |
|
|
E | E, E, EVAL, EXEC, EXPLAIN |
|
|
F | F, F, FILTER, FLATTEN, FLOAT, FOREACH, FULL |
|
|
G | GENERATE, GROUP |
|
|
H | HELP |
|
|
I | IF, ILLUSTRATE, IMPORT, INNER, INPUT, INT, INTO, IS |
|
|
J | JOIN |
|
|
K | KILL |
|
|
L | L, L, LEFT, LIMIT, LOAD, LONG, LS |
|
|
M | MAP, MATCHES, MAX, MIN, MKDIR, MV |
|
|
N | QNOT, NULL |
|
|
O | ONSCHEMA, OR, ORDER, OUTER, OUTPUT |
|
|
P | PARALLEL, PIG, PIGDUMP, PIGSTORAGE, PWD |
|
|
Q | QUIT |
|
|
R | REGISTER, RIGHT, RM, RMF, RUN |
|
|
S | SAMPLE, SET, SHIP, SIZE, SPLIT, STDERR, STDIN, STDOUT, STORE, STREAM, SUM |
|
|
T | TEXTLOADER, TOKENIZE, THROUGH, TUPLE |
|
|
U | UNION, USING |
|
|
V, W, X, Y, Z |
|
pig数据类型对应的java类
pig类型 | java类 |
bytearray | org.apache.pig.data.DataByteArray |
chararray | String |
int | Integer |
long | Long |
float | Float |
double | Double |
tuple | org.apache.pig.data.Tuple |
bag | org.apache.pig.data.DataBag |
map | Map<Object, Object> |