1.执行模式
local mode
在本地模式下,Pig运行在单个JVM中,访问本地系统,适用于处理小规模数据集
% pig -x local
grunt>
MapReduce mode
2.数据关系
关系(relation)、包(bag)、元组(tuple)、字段(field)、数据(data)的关系
- 一个关系(relation)是一个包(bag),更具体地说,是一个外部的包(outer bag)。
- 一个包(bag)是一个元组(tuple)的集合。在pig中表示数据时,用大括号{}括起来的东西表示一个包——无论是在教程中的实例演示,还是在pig交互模式下的输出,都遵循这样的约定,请牢记这一点,因为不理解的话就会对数据结构的掌握产生偏差。
- 一个元组(tuple)是若干字段(field)的一个有序集(ordered set)。在pig中表示数据时,用小括号()括起来的东西表示一个元组。
- 一个字段是一块数据(data)。
3.基本用法
实例一:计算多维度组合下的平均值的实际例子
数据
[root@localhost pig]$ cat a.txt
a 1 2 3 4.2 9.8
a 3 0 5 3.5 2.1
b 7 9 9 - -
a 7 9 9 2.6 6.2
a 1 2 5 7.7 5.9
a 1 2 3 1.4 0.2
代码A = LOAD 'a.txt' USING PigStorage (',') AS (col1:chararray, col2:int, col3:int, col4:int, col5:double, col6:double);
B = GROUP A BY (col2, col3, col4);
C = FOREACH B GENERATE group, AVG(A.col5), AVG(A.col6);
DUMP C;
结果((1,2,3),2.8,5.0)
((1,2,5),7.7,5.9)
((3,0,5),3.5,2.1)
((7,9,9),2.6,6.2)
实例二:统计数据行数
数据
[root@localhost pig]$ cat a.txt
a 1 2 3 4.2 9.8
a 3 0 5 3.5 2.1
b 7 9 9 - -
a 7 9 9 2.6 6.2
a 1 2 5 7.7 5.9
a 1 2 3 1.4 0.2
代码
A = LOAD 'a.txt' USING PigStorage (',') AS (col1:chararray, col2:int, col3:int, col4:int, col5:double, col6:double);
B = GROUP A ALL;
C = FOREACH B GENERATE COUNT(A.col2);
DUMP C;
结果
(6)
实例三:FLATTEN操作符
数据
[root@localhost pig]$ cat a.txt
a 1 2 3 4.2 9.8
a 3 0 5 3.5 2.1
b 7 9 9 - -
a 7 9 9 2.6 6.2
a 1 2 5 7.7 5.9
a 1 2 3 1.4 0.2
代码
grunt> A = LOAD 'a.txt' USING PigStorage (',') AS (col1:chararray, col2:int, col3:int, col4:int, col5:double, col6:double);
grunt> B = GROUP A BY (col2, col3, col4);
grunt> C = FOREACH B GENERATE FLATTEN(group), AVG(A.col5), AVG(A.col6);
grunt> DUMP C;
结果(1,2,3,2.8,5.0)
(1,2,5,7.7,5.9)
(3,0,5,3.5,2.1)
(7,9,9,2.6,6.2)
按照pig文档的说法,FLATTEN用于对元组(tuple)和包(bag)“解嵌套”(un-nest)
实例四:FILTER
数据
[root@localhost pig]$ cat a.txt
a 1 2 3 4.2 9.8
a 3 0 5 3.5 2.1
b 7 9 9 - -
a 7 9 9 2.6 6.2
a 1 2 5 7.7 5.9
a 1 2 3 1.4 0.2
代码
grunt> A = LOAD 'a.txt' USING PigStorage (',') AS (col1:chararray, col2:int, col3:int, col4:int, col5:double, col6:double);
grunt> B = FILTER A BY col5 is not null;
grunt> dump B;
结果
(a,1,2,3,4.2,9.8)
(a,3,0,5,3.5,2.1)
(a,7,9,9,2.6,6.2)
(a,1,2,5,7.7,5.9)
(a,1,2,3,1.4,0.2)
实例五:JOIN
JOIN A BY $0,B BY $1...
实例六:FOREACH...GENERATE...
foreach B generate group,COUNT(A.$0);
实例七:ORDER...BY...
order A by $0,$1;
实例八:SUBSTRING
substring(chararray source,int start,int end): 提取source的子字符串,位置从start到end。输入字符串小于start会报错。