`
这些年
  • 浏览: 390694 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

pig学习笔记

 
阅读更多

1:数据类型

       基本类型和复合类型(即由多个基本类型结成的类型)

      基本类型:(int,long,float,double,chararray,bytearray)

            基本的类型与java中的类型一致

           chararray:字符串(String)或字符数组(‘aaa’或'\n'可以表示特殊符号)

           bytearray:字节数组(二进制)如java中的byte[]

      复杂类型:(map,tuple,Bag)

           map:key/value对,key是chararray类型数据,value的类型不台有多种

                     map常量:['a'#'123','b'#gbz]

           tuple:定长,类型任意,有序(可以通过位置得到元素,从0开始)

                     常量:('a',3)

           Bag:无序的tuple集

                     常量:{('a',4),('b')}

bag不须要加载到内存中,它可以变得非常大

    NULL值:任何数据类型的数据都可以为null,定义与sql中的null一样

2:模式:在加载数据时,可以指定数据按什么分割放到一个定义好的类型中,这类型称为模式(类型关系数据库中的表)

         例:div = load 'aa.txt' as (name[:chararray],age[:int]);    类型可省

       09版本后,不指定类型会把"文件"中 超过部分截掉,如果文件中一行只有一个字段哪么age为null    

用户声明的模式可以是pig中的任意类型:如 as (a:int),as (a:map[],b:map[int]) ,as (a:tuple(),b:tuple(X:int,Y:int)) ,as (a:bag{},b:bag{t:(X:int,Y:int)})

       加载数据时模式可以省略,套用usIng后的函数的模式,如果数据本身就有模式(如文件中的数据是josn)可以不声明模式

         例:mdata = load 'a.txt' using HCatLoader();  

    模式中的数据类型:

         除了可以使用名称进行引用还可以通过位置进行引用,从0开始,用$0表示第一个字段

         pig中刚开始不知道字段的类型,它先假定是bytearray类型的,之后会跟据字段所在表达式中的别外字段决定

       

daily = load 'a.txt'
calcs = foreach daily generate $1 / 10 , $2 * 1.2 , substring($3,1,2),$4 - $5  , $6 > $7

      因为$1的除数是整型的,哪么$1也是整型的(如果文件中不是,可以通过转换成int)

      因为$2的乘数是double,哪么$2也是double的

      $3是chararray类型的,因为substring处理只能是字符类型

      $4,$5是double,-只能用于数值类型,为了安全转为double(转为int会丢精度,如果$4,$5确实是浮点)

      $6,$7为bytearray,因为>可以用于数值,char,byte等类型

如果两个数据,其中一个没有模式,它们join 后的结果也没有模式

 3:类型转换

      pig中的类型强转跟java的一样

      所有类型不可以转为bytearray,反过来可以。(复杂类型不可以转换)

用户定义的UDF中不应该返回bytearray

 4:语法

      pig中除了了内置函数(如:load,LOAD)是大小字不敏感的,其它都是大小定敏感的

     1):加载数据

          pig默认的加载函数是:pigStorage,它会加载存放在hdfs中并以制表符分割的文件

         

divs = load '文件|文件夹' using PigStorage(',');    #可以指定参数分割数据,这里是按逗号
divs = load 'a.txt' using HBaseStorage(); #从hbase中加载数据

         加载文件夹,可以加载文件夹下的所有文件,也可以使用正则表达式来加载符合条件的文件(支持正则表达式由hdfs决定,hadoop20中有【?,*,[acb],[a-z],[^abc],\,{ab,cb}】)

注:using须要在as前面(a = load '/user/root/data/a.txt' using PigStorage(',') as (a:int,b:long,c:int); 

       如果文件中‘没有c这列字段’或无法类型转换,在输出时为空白(不是null这个字符)

     2)数据的存储

           默认使用pigStorage将结果以制表分割保存到hdfs中

store proc into '/user/root/aa'; #把proc保存到aa目录下
store proc into '/user/root/aa' using pigStorage(','); #可以指定保存的位置和分割方式

      3)数据的输出

            dump proc; 可以将proc输出到屏幕上

       4)关系操作

        foreach 把数据通过表达式传递给另外一个变量,

a = foreach A generate user,$2 #将A的user字段和第2个字段传递给变量a
a = foreach A generate * ; #*表示所有字段
a = foreach A generate $1..$3; #表示装第二,三,四个字段传递给a

       三目运算(b = foreach a  generate  (2==2?1:4);)

2 == 2 ? 1 : 4 --返回1
null == 2 ? 1 : 4 --返回null
2 == 2 ? 1 : 'aaa' --类型错误 ,冒号两边数据类型要一致

        对于map中的数据,使用:map名#'字段名'  来引用,字段名不存在是返回null

        对于tuple中的数据,使用:tuple名.字段名|位置  来引用,位置无是返回null,字段名无时报错

   为字段命名:

a = foreach A generate $1 as gbz , $3 as b;

       Filter:过滤数据给新变量

         格式:c = filter b by $0 matches '^0*';

         输出:匹配就源样输出整行,否则不输出

         比较操作:基本类型数据可以使用(==,!=,>,>=,<=)

                          map和tuple可以使用(==,!=),tuple要求模式相同或都无模式

                          chararray可以使用正则表达式(如:c = filter b by $0 matches '^0*'

                   可以在布尔操作符使用not,and.or(有短路功能)

                   任务成null比较都输出空白(null)【c = filter b by $1==null;

                   可以使用is null或is not null判断是否为空

        Group: 把具有相同键值的数据聚合在一起

           格式:c = group b by $0;       (所有字段可用:group b all;)(可对多个字段:c = group b by ($0,$1))

           输出:以$0为key的包含模式中所有字段的bag

           得到所有key:d = foreach c generate group;

        group会触发一个reduce过程,会有数据倾斜(reduce不会同时结束),pig使用组合器来解决数据倾斜(组合器可以降低网络数据传输和写入磁盘的数据量,可以提高效率,用户UDF可以实现组合器)

           处理null值方式是把所有key为null放在一起  

        Order by:对数据排序,产生一个全排序(对所有数据排序)的结果

           格式:c = order b by $0;   (可以降序:c = order b by $0 desc , $1; )  只有$0降

           输出:排好序的数据集(tuple)

           不能对map,tuple,bag使用,所有null都最小

           会进入一个reducer(它会先采样每个数据块,只取第一行先排序,然后对所有排序)

       Distinct:去重

           格式:c = distinct b;

           会进入一个reducer

       join:连接两个输入数据(匹配键值相同的数据放在一起,其它的去掉)

           格式:c = join b by b1,a by a1;   (可以指定多个键:c = join b by (b1,b2),a by (a1,a2);

           

 

          

                   

分享到:
评论

相关推荐

    大数据Pig学习

    pig学习 PPT

    PIG微服务前后端源码

    PIG(国内微服务热度最高的一个社区)

    pig源码0.15版

    pig0.15源码,适合小白学习大数据参考和使用

    Beginning Apache Pig(Apress,2016)

    Learn to use Apache Pig to develop lightweight big data applications easily and quickly. This book shows you many optimization techniques and covers every context where Pig is used in big data ...

    Pig编程指南

    Pig编程指南,经典的pig学习资料。搭建hadoop平台后,学习更快。

    pig-0.7.0.tar.gz

    Hadoop系统的pig工具包,很好用的

    Pig安装与Pig Latin语言,应用案例.

    来试试Pig安装,与学学Pig Latin语言,玩玩应用案例

    apache pig 基础及应用

    apache pig 基础及应用,urldecode row_number web日志分析 根据 用户行为 做出 简易的 相似度 判断。

    PIGO搜索 v2.3

    PIGO是一个采集引擎,开始的时候是按照采集各大搜索引擎而设计的。随着需求的增加,现在PIGO不单单能采集搜索引擎,而且能聚合结果,甚至,加载不同的核心,PIGO就变成不同的网站。所以PIGO不是任何类型的网站,但又...

    大数据之pig 命令

    pig将就的命令

    大数据pig实战

    大数据pig实战,大数据pig实战,大数据pig实战大数据pig实战大数据pig实战

    Beginning Apache Pig: Big Data Processing Made Easy [2016]

    Beginning Apache Pig: Big Data Processing Made Easy English | 29 Dec. 2016 | ISBN: 1484223365 | 300 Pages | PDF | 4.9 MB Learn to use Apache Pig to develop lightweight big data applications easily ...

    Pig-Toolbox_v1.0.7.6

    Pig-Toolbox_v1.0.7.6 谷歌浏览器插件,CRX可解压,用开发者模式安装

    pig的源码包

    pig源码包,最好的学习资料还是源码包。里边包括核心包,以及其他贡献的包,pigunit,还有源码

    pig官方udf教程

    pig官方的udf教程,介绍了 Writing Java UDFs Writing Python UDFs Writing JavaScript UDFs Writing Ruby UDFs Piggy Bank,一个开源pig的udf包,主要是java

    Pig编程指南.pdf

    Pig编程指南.pdf Pig编程指南英文版pdf文档

Global site tag (gtag.js) - Google Analytics