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、
基本类型: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、
相关文章推荐
- 深度纹理的使用
- 多项目并行开发如何做到快速切换——sublime Text3
- Spring核心框架 - AOP之动态代理机制
- ubunt火狐浏览器插件Flash插件
- python_3(循环语句、if、switch、for、break、冒泡算法)
- struts2中配置文件里的package元素和namespace属性的区别?
- 前端开发问题之字符串日期转日期对象在safari浏览器中出现Invalid Date
- 黑马程序员——ObjectiveC基础——对象关系
- 课堂例子验证
- Alibaba
- lintcode: 爬楼梯
- javax.el.ELException: Cannot convert 1 of type class java.lang.String to int
- JW Player How to get mouse click position?
- A. Duff and Meat
- Cracer 2015 最新 价值1500元web渗透脚本入侵百集教程分享
- [Enumeration]USB总线枚举过程
- 父、子对象在内存中的存储01-16
- Git分支管理策略
- Linux系统编译boost源码,然后和Qt Creator配套使用
- 软件功能测试工具-UFT/QTP