define 用于给用户自定的函数(UDF)或者是一串命令流设置别名。类似于C中的#define,为了调用函数时更简单明了。
用法:
Define alias {functiion | ['command' [input] [output] [ship] [cache]};
即:将函数或者是一串命令或者是input/output/ship/cache等复制给一个别名alias;
下面是官网中的例子:
DEFINE CMD 'perl PigStreaming.pl - nameMap' input(stdin using PigStreaming(',')) output(stdout using PigStreaming(',')); A = LOAD 'file'; B = STREAM B THROUGH CMD;
Register
register用于将jar文件导入到pig脚本,这样就可以使用jar文件中的一些函数。类似于在eclipse中通过import导入包以及在visual studio中通过#include来引入一个包。
使用方法是:
register alias;
其中alias 是jar file的路径。
example:
在上面的这段脚本中,将myfunc.jar这个包添加到当前目录中,然后才可以调用这个包中的 myfunc这个函数以及它的MyEvalFunc这个方法。REGISTER /src/myfunc.jar; A = LOAD 'students'; B = FOREACH A GENERATE myfunc.MyEvalFunc($0);
Foreach ... Generate...
此关键词的用法是:
alias_A = foreach alias_B generate alias_C,...;
解释: 通过便利alia_B的每一行,根据 其中的变量alias_C等产生新的结构元祖;
注意:alias_C必须是alias_B中的元祖的组成元素。
Group
产生分组;
用法: A =Group B By C;
关于模式:
如果在load的时候没有数据类型,那么默认的数据类型是:byteArray; 即字节数组;如果load的时候,没有as后面的部分,那么引用的时候可以使用$0,$1等来引用元组中内容;
grunt> record_without_as = load 'sample.txt';
grunt> p_recorded = foreach record_without_as generate $0,$1,$2;
LOAD 加载时候的问题:
1. 如果原有的数据是以逗号等分割的,有时候pig不能智能的去分割,这时候使用 PigStorage来完成
a = load 'test2.txt' using PigStorage(',') as (sim_id, cell, time);
关于向pig脚本传入参数的问题
如果pig脚本的输入输出需要通过变量来控制的话,那么:
pig -param input_dir="cell_data_test1.txt" -param output_dir="output_pig/test1" -x local test.pig