您的位置:首页 > 其它

pig 数据模型

2015-10-17 22:21 169 查看
数据类型:基本类型,复杂类型。

基本类型:int,long,float,double,char array(string:注意以单引号),bytearray(byte[])

复杂类型:map,type,bag(可以任意嵌套)

map:key 是char array ;value 可以任意类型。

[’name’#’bob’,’age’#55]:创建一个包含 name 和 age 两个键的map。

tuple:是一个定长,无须相同类型。

(’bob’,55):创建一个包含两个字段的tuple 常量。

bag:是一个无序的tuple集合。无须加载到内存中的数据类型。

{(‘bob’,55),(’sally’,52),(‘john,25’)}:构造了一个包含的3个 tuple 的 bag,每个tuple 包含两个字段。

模式

一些常用的模式(数据以Json格式存储)已经放在HCatalog 中。

mdata = load ‘mydata’ using HCatLoader();

在加载数据时,没有告诉Pig 数据的模式,可以$0 表示第一列。

daily = load ’NYSE_daily’;

calcs = foreach daily generate $7 /1000 , $3 * 100.0 , SUBSTRING($0,0,1) , $6 - $3

注意:由于1000 是个整型,所以$7 会转换成整型。100.0 是个double,$3会自动转换成 double。$0 会推断为chararray。$3,$6 会推断为double ,因为这样更安全。

fltrd = filter daily by $6 > $3;

由于数值型,chararray 和 bytearray 都适合,所以pig 推断不出来,那么pig 都作为bytearray 处理,对这些字段内的数据进行一个字节一个字节的比较。

没有模式是具有感染性

divs = load ’NYSE_dividends’ as ( exchange,stock_symbol,date,dividends );

daily = load ’NYSE_daily’;

jnd = join divs by stock_symbol ,daily by $1;

这个例子中pig 并不知道 daily 的模式,所以他不知道在join 中divs 和 daily 的模式。

类型转换

与java语法一样,(int)值

unintended = foreach player generate (int)bat#’base_on_balls’ - (int)bat#’ibbs’;

所有类型都不允许转换为bytearray。转为复杂类型或者复杂类型转为其他类型目前也是不允许的。

可以从bytearray 转换为复杂类型。



daily = load ’NYSE_daily’ as (exchange:char array,symbol:chararray,volume:int,close:float )

rough = foreach daily generate volume * close;

pig 隐式转换时,会向范围更大的类型转。

int 和 long 一起会转long。int,long 和 float 一起会转 float。int、long、float 和double 一起会转double、
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: