Pig 中的一些语法知识。

来源:互联网 发布:服务器有几个端口 编辑:程序博客网 时间:2024/06/07 14:01
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:
REGISTER /src/myfunc.jar;A = LOAD 'students';B = FOREACH A GENERATE myfunc.MyEvalFunc($0);

在上面的这段脚本中,将myfunc.jar这个包添加到当前目录中,然后才可以调用这个包中的 myfunc这个函数以及它的MyEvalFunc这个方法。

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








0 0
原创粉丝点击