`
这些年
  • 浏览: 399810 次
  • 性别: 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);

           

 

          

                   

分享到:
评论

相关推荐

    HADOOP学习笔记

    【HADOOP学习笔记】 Hadoop是Apache基金会开发的一个开源分布式计算框架,是云计算领域的重要组成部分,尤其在大数据处理方面有着广泛的应用。本学习笔记将深入探讨Hadoop的核心组件、架构以及如何搭建云计算平台。...

    大数据技术原理学习笔记.docx

    本笔记基于林子雨老师在MOOC上的《大数据技术原理》课程,旨在为IT从业者和大学生提供一个全面了解大数据的基础框架。 首先,我们要认识到大数据的发展背景。随着互联网的普及,以及物联网、社交媒体、移动设备等...

    3.Hadoop学习笔记.pdf

    Hadoop的生态系统还包括Hive、HBase、Pig、Zookeeper等多种工具和组件,用于数据分析、实时处理、任务调度和协调。 Hadoop安装通常包括下载、配置和启动集群的NameNode和DataNode。NameNode是HDFS的主节点,负责...

    学习笔记zzzzz.zip

    压缩包内的“学习笔记”可能包括以下内容:Hadoop安装与配置教程,HDFS的基本操作和管理,MapReduce编程模型的实例解析,Hadoop集群的优化策略,以及YARN、HBase、Hive和Pig的使用方法等。这些笔记可以帮助读者深入...

    大数据技术学习笔记1

    大数据技术学习笔记1 大数据技术学习笔记1 是一份关于大数据技术的学习笔记,涵盖了大数据技术的基本概念、Hadoop 生态系统、MapReduce 算法、Spark 框架、分布式计算平台等多个方面。 Hadoop 生态系统 Hadoop 是...

    hadoop1.0\2.0学习笔记及

    本学习笔记涵盖了Hadoop 1.0和2.0两个主要版本,旨在帮助读者全面理解Hadoop的核心概念、架构以及实际操作。 在Hadoop 1.0中,核心组件主要包括HDFS(Hadoop Distributed File System)和MapReduce。HDFS是一种...

    pig-0.16.0.tar安装包

    【标题】"pig-0.16.0.tar安装包" 涉及的主要知识点是Apache Pig的安装和使用,这是一个基于Hadoop的数据流编程平台,用于处理大规模数据集。...通过学习和理解上述概念,你可以高效地使用Pig-0.16.0进行大数据分析。

    斯坦福大学机器学习笔记完整版

    在这份斯坦福大学机器学习课程的个人笔记中,涵盖了许多关键的机器学习知识点和概念。...作为个人学习笔记,它为读者提供了一个很好的学习资源,能够帮助读者更好地理解和掌握机器学习的相关概念和方法。

    大数据学习笔记文档.rar

    《大数据学习笔记文档》 大数据领域是信息技术的热门方向,涵盖了多个关键技术,如Linux、Kafka、Python、Hadoop和Scala等。以下是对这些技术的详细介绍: **Linux**:作为大数据处理的基础平台,Linux因其开源、...

    pig-0.17.0.tar的安装包,

    《Apache Pig 0.17.0 安装与配置指南》 Apache Pig 是一个用于大数据分析的平台,它提供了一种高级语言 Pig Latin 来处理大规模...通过不断的实践和学习,你将能更好地掌握Pig的潜力,为大数据分析带来强大的动力。

    Hadoop学习笔记.pdf

    - Pig:是一种高级的脚本语言,用于编写MapReduce任务,适用于数据流和数据转换的场景。 - Hive:为数据仓库设计,提供了SQL方言HiveQL,允许用户编写类似SQL的查询语句来操作Hadoop中的数据。 - Sqoop:是一个开源...

    粉红猪学习笔记.doc

    《粉红猪小妹学习笔记》 粉红猪小妹(Peppa Pig)是一部广受欢迎的儿童动画片,它通过简单有趣的故事教给孩子们日常生活中的词汇和表达。以下是根据动画内容整理出的一些重要英语知识点: 1. **muddy** - 形容词,...

    hadoop学习笔记

    《Hadoop学习笔记》 Hadoop,作为大数据处理的核心框架,是开源社区的杰作,由Apache软件基金会维护。这份文档旨在深入解析Hadoop的基本概念、架构及其在大数据处理中的应用,帮助读者全面掌握这一重要技术。 一、...

    Hadoop学习笔记

    《Hadoop学习笔记》 Hadoop,作为大数据处理的核心组件之一,是Apache软件基金会开发的开源框架,专门针对大规模数据集进行分布式计算。这个框架基于Java语言实现,它设计的目标是高容错性、可扩展性和高效的数据...

    大数据技术学习笔记之Hive.zip

    这份“大数据技术学习笔记之Hive”旨在帮助我们深入理解并掌握Hive的核心概念和技术应用。 一、Hive概述 Hive主要为非结构化或半结构化的海量数据提供数据仓库服务,通过SQL-like查询语言(HQL)进行数据查询,简化...

    大数据学习笔记,学习路线,技术案例整理。.zip

    本资料包“大数据学习笔记,学习路线,技术案例整理”是一个全面的大数据学习资源,旨在帮助初学者和进阶者系统地掌握大数据的核心技术和应用实践。 首先,我们来了解一下大数据的关键概念和技术栈。大数据通常有四...

    斯坦福大学机器学习个人笔记

    文章的作者通过个人学习笔记的方式整理了上述内容,反映了作者对机器学习各个方面的认识和理解。笔记中不仅涉及了理论知识,还包括了一些实践和应用,如使用Hadoop、Pig、Hive、Mahout和NoSQL等工具处理大数据和...

    Hadoop数据分析平台学习笔记

    ### Hadoop数据分析平台学习笔记 #### 一、Hadoop概述 **Hadoop**是一个开源软件框架,用于分布式存储和处理大型数据集。它的设计灵感来源于Google的论文,其中包括Google文件系统(GFS)和MapReduce计算模型。...

Global site tag (gtag.js) - Google Analytics