Pig Latin UDF语句
REGISTER 在Pig运行时环境中注册一个JAR文件
DEFINE 为UDF、流式脚本或命令规范新建别名
Pig Latin命令类型
kill 中止某个MapReduce任务
exec 在一个新的Grunt shell程序中以批处理模式运行一个脚本
run 在当前Grunt外壳程序中运行程序
quit 退出解释器
set 设置Pig选项
模式(Schema)
Pig的一个关系可以有一个关联的模式,模式为关系的字段指定名称和类型。Pig的这种模式声明方式和SQL数据库要求数据加载前必须先声明模式截然不同,Pig设计的目的是用于分析不包含数据类型信息的纯文本输入文件的。但是尽量定义模式,会让程序运行地更高效。
缺点:在查询中声明模式的方式是灵活的,但不利于模式重用。每个查询中维护重复出现的模式会很困难。处理这一问题的办法是写自己的加载函数来封装模式。
SQL数据库在加载数据时,会强制检查表模式中的约束。在pig中,如果一个值无法被强制转换为模式中申明的类型,pig会用空值null代替,显示一个空位。大数据集普遍都有被损坏的值、无效值或意料之外的值,简单的方法是过滤掉无效值:
grunt>good_records = filter recordsby temperature is not null;
另一种技巧是使用SPLIT操作把数据划分成好和坏两个关系,然后在分别进行分析:
grunt> split records intogood_records if temperature is not null,
bad_records if temperature isnull;
grunt> dump good_records;
在Pig中,不用为数据流中的每个新产生的关系声明模式。大多数情况下,Pig能够根据关系操作的输入关系的模式来确定输出结果的模式。有些操作不改变模式,如Limit。而Union会自动生成新的模式。
重新定义一个关系的模式用带as子句的FOREACH…GENERATE操作来定义输入关系的一部分或全部字段的模式
Pig的函数分为计算函数,过滤函数,加载函数和存储函数。
计算函数: AVG, COUNT, CONCAT, COUNTSTAR,DIFF, MAX, MIN, SIZE, SUM, TOKENIZE
过滤函数:IsEmpty
加载/存储函数:PigStorage,BinStorage, BinaryStorage, TextLoader, PigDump
内连接的实现:
COGROUP,inner和flatten组合使用相当于实现了内连接:
G = COGROUP A by $0 innner, B by $1inner;
H = foreach G generate flatten($1),flatten($2)
// H和join A by $0, B by $1相同
foreach…generate…
用于重新生成模式中的数据名和数据类型。默认保持原有名字,但是如果存在表达式,则无数据名,只有数据类型;而两个不兼容类型计算后,生成数据类型unknown,必须在generate 变量后使用as关键词定义别名;
#用于map查找;
.用于tuple(元组)投影;
+对于bag不适用;
下面的语句将执行不了
A= load 'foo'as (x:chararray, y:int, z:int);
B = group A by x; -- produces bag Acontaining all the records for a giv