`

Pig 基础知识学习(语法)

    博客分类:
  • 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 后的结果也没有模式
 A = LOAD '/input/in1/ncdc_data.txt' USING PigStorage(':') AS (year:int, temp:int, quality:int);


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决定,hadoop2.0中有【?,*,[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*';
输出:匹配就源样输出整行,否则不输出
比较操作:基本类型数据可以使用(==,!=,>,>=,<=)
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);)


分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Programming Pig Dataflow Scripting with Hadoop 2nd EditionPDF

    2. **Hadoop基础知识**:作为Pig运行的平台,Hadoop的基础知识是必不可少的。读者可能会学到HDFS(Hadoop分布式文件系统)的工作原理,MapReduce编程模型,以及YARN(Yet Another Resource Negotiator)资源管理框架...

    学习hadoop--java零基础学习hadoop手册

    ### Hadoop与Java基础知识学习手册 #### 一、Hadoop简介及Java基础知识 **标题**:“学习hadoop--java零基础学习hadoop手册” **描述**:“学习hadoop--java零基础学习hadoop手册” 本手册旨在为完全没有Java基础...

    hadoop_hbase_pig

    标题 "hadoop_hbase_pig" 暗示了这个压缩包包含与Hadoop、HBase和Pig相关的技术知识。Hadoop是一个开源框架,主要用于处理和存储大量数据,而HBase是建立在Hadoop之上的分布式列式数据库,Pig则是一个用于大数据分析...

    中考英语考纲基础知识练习(名词).pdf

    综上所述,这份“中考英语考纲基础知识练习(名词)”文件为学生提供了一个系统学习和练习中考名词知识点的平台。它不仅帮助学生复习和巩固名词的用法,还通过各种题型使学生加深对名词的理解,这对于提高中考英语成绩...

    知识学习地图

    Java的学习路径通常包括语法基础、面向对象编程、集合框架、多线程、I/O流、网络编程、JVM原理及优化等。 2. **大数据**:大数据涉及处理海量、高速生成的数据,以提取有价值的信息。Hadoop是大数据处理的核心框架...

    精品课程推荐 大数据与云计算教程课件 优质大数据课程 21.Pig模式与函数(共64页).pptx

    课程介绍了Spark的基础知识、SparkSQL以及使用Scala进行Spark开发。 【其他组件】课程还涉及了Oozie工作流调度系统、Impala交互式查询引擎、Solr全文搜索引擎、Lily、Titan图数据库和Neo4j图形数据库,以及Elastic...

    开源项目-esimov-pigo.zip

    下面将详细介绍Pigo的相关知识点。 1. **Go语言**:Pigo是用Go语言编写的脸部检测库,Go是一种静态类型的、编译型的、垃圾回收的语言,设计时考虑了并发性,有着高效的性能和简洁的语法。Go的跨平台特性使得Pigo能...

    Pig Game (A Simple Multiplayer Game).zip

    总的来说,JavaScript实现的Pig Game是一款集趣味性和教育性于一体的项目,它涵盖了JavaScript的基础语法、事件处理、网络通信等多个方面,对于学习和提高JavaScript编程技能大有裨益。通过这个游戏,你不仅可以掌握...

    java_c++_机器学习等多种学习结构图.zip

    它的知识结构涵盖了基础语法、面向对象编程概念(如类、对象、继承、多态和封装)、异常处理、集合框架(如ArrayList、LinkedList、HashMap等)、IO流、网络编程、多线程、反射机制,以及Spring框架、MyBatis等流行...

    Java、Python、大数据、前端学习路线图(思维导图)

    以上四大领域的学习路线图涵盖了基础知识到高级应用,但实际学习过程中,还需结合项目实践和持续的在线资源学习,如LeetCode、Stack Overflow和官方文档,以保持技术的更新和深化理解。记住,技术发展迅速,持续学习...

    八年级英语下册第八单元基础知识--复习.doc

    这篇文档是针对初中二年级英语下册第八单元的基础知识复习,涵盖了词汇、短语和一些重要的语法点。以下是这些知识点的详细说明: 一、单词 1. 蜘蛛:spider 2. 蛇:snake 3. 仓鼠:hamster 4. 海龟:turtle 5. 狐狸...

    小学英语单词分类带音标和语法点.doc

    这些词汇都是小学生需要掌握的基础知识,对于提高他们的阅读理解能力和口语表达能力至关重要。 在学习用品类别中,包含了学生日常学习中常见的物品,如pen(钢笔)、pencil(铅笔)和pencil-case(铅笔盒),这些都...

    原生javascript写的小游戏Flappy bird Pig 改自 keenwon

    《原生JavaScript实现的小游戏:Flappy Bird与Pig》 在编程世界中,小游戏是初学者和经验丰富的开发者都喜欢的实践项目。...同时,这也是一个很好的学习资源,可以帮助初学者掌握JavaScript编程和游戏开发的基础知识。

    hadoop大数据培训零基础学习hadoop-北京尚学堂.pdf

    对于零基础的学习者,以下是你需要掌握的基础知识: 1. **Java基础知识**: - 对象、接口、继承和多态的概念是理解面向对象编程的关键。 - 熟悉Java语法,包括数据类型、控制结构、异常处理等。 - 掌握常用的...

    java大数据培训视频完整版,用于就业培训的视频,由于文件过大,用百度网盘保存,让你快速学习java大数据

    4. **Scala语言**:Spark主要使用Scala编写,因此了解Scala的基础知识,包括函数式编程概念,对于高效地使用Spark至关重要。 5. **数据清洗与预处理**:学习如何使用Java和相关工具进行数据清洗和预处理,这是数据...

    java及hadoop学习资料

    1. **Java基础知识**:Java的学习通常从基础语法开始,包括数据类型、变量、控制结构(如if-else,switch,for,while等)、类与对象、封装、继承、多态等面向对象的概念。 2. **异常处理**:Java的异常处理机制是其...

    三年级下册语法知识练习卷精选.doc

    这篇文档是针对小学三年级下学期英语语法学习的一份精选练习卷,主要涵盖了名词复数变化、"some"和"any"的用法、"have"和"has"的区别以及"there be"句型的运用。此外,还有关于询问来自何处及其回答的练习。 一、...

    hadoop学习资料书

    本学习资料书主要针对Hadoop的初学者,旨在提供全面的基础知识解析,帮助读者快速掌握这一强大的大数据处理工具。 一、Hadoop概述 Hadoop是由Doug Cutting和Mike Cafarella于2005年基于Nutch搜索引擎项目发展起来...

Global site tag (gtag.js) - Google Analytics