文档章节

Pig数据模型及Order,Limit关系操作

震秦
 震秦
发布于 2013/04/15 20:32
字数 1267
阅读 3920
收藏 21

上一篇博客主要讲解了Pig的安装和一个试手的例子,下面说一下Pig的数据模型。

Pig的数据模型基本分为2大类,基本类型,和复杂类型。基本类型只能包含一个简单的数值,复杂类型可以包含其他所有类型。

基本类型,和其他大多数主流语言提供的简单类型一样,Pig也提供int, long, float, double,chararray(Sring),bytearray(字节类型)

Pig是用Java开发的,因此Java程序员应该能想象的到,上面的基本类型都是java.lang包中对应类型的实现的。

需要注意的是,Pig的基本类型中没有Boolean值,但是在Pig的运行期却是有Boolean值的,因为关系Filter需要一个Boolean关系为true时数据才能流过去。这点上需要注意。

复杂类型包括Map, Tuple和Bag

Map相当于Java的Map<String, Object>类型的。Key必须是一个chararray,而值可以是任何基本和复杂类型。表示为[key#value]

Tuple可以理解为Java中的List,其实如果懂得Python,它更像Python中的Tuple[元组],表示为:(1, “abc”, 1.5)等

Bag的数据类型按我的理解为Java的Set<Tuple>,它内部的数据是无序的。表示为:{(1, “abc”, 1.5),(2, “bcd”, 2.0)...}

紧接着上一篇统计单词的例子,下面我做一些改写。一步一步的讲解Pig的运行数据状态。

统计单词的第一步就是要把文本文件读入,然后分词。

words = load 'nie.txt' using PigStorage(' ') as (line);
加载数据统一用load, 使用了PigStorage加载文件,Pig Storage默认是使用Tab分割文件中的内容的,因为我的例子是一片英文文章,因此只需要用空格做为分隔符就好 了。as (line)是在为数据指定模式,所有的数据加载进Pig都是Tuple类型的,因此使用(line),或者(line:chararray)。Tuple也可以指定多个值的,如(line:chararray,num1:int, num2:double),多个值的Tuple必须要数据要能转换成这样的,否则就会出错,或者加载了其他不对应的值也是空值,这样也没有意义。

Pig Latin脚本的任何地方都可以输出结果查看,我们先看一下words的结果。

dump words;
输出的结果:
(extravagant,)
(without)
(imagine)
(in)
(that)
(unfathomable)
(BECAUSE)
(self-tyranny--Nature)
我截取了一段结果,可以看到他们的数据都是Tuple,里边只有一个值。

因此如果为了统计词频,下一步应该是用Mapreduce的Map把相同的词聚集到一起,然后统计。下面的这句代码就很轻松的实现。

grpd = group words by line;
紧接着,我们输出grpd(dump grpd;)的结果查看。
(different,{(different),(different)})
(extremely,{(extremely)})
(mistaken,,{(mistaken,)})
(naturally,{(naturally)})
(ourselves,{(ourselves),(ourselves)})
(permitted,{(permitted)})
(something,{(something),(something)})
熟悉MapReduce应该很清楚了,他把相同的词合并到了一起,组成了一个Tuple(word, {word, word})的数据格式。Reduce再把 {word, word }遍历一边得出一个count就实现了统计词频的效果了。

完整的程序:

words = load 'nie.txt' using PigStorage(' ') as (line); --以空格作为分隔符把内容分词读入
grpd = group words by line;     --以每个单词聚类,真实的是一个MapReduce的Map阶段
cntd = foreach grpd generate group, COUNT(words); -- 这里既上一步Map完成紧接着Reduce阶段进行统计
dump grpd;  --直接在终端打印结果便于查看
上面的程序正常运行下来应该能统计出词了该词出现的次数,文本很长的情况下着实没有什么意思,一般都会看前面高频的一些词汇,因此还应该做个Order By,然后取出前面的数据。幸好Pig是支持的。
cous = order cntd by $1 desc;
limitresult = limit cous 50;
dump limitresult;

接着上面的dump前,继续排序,然后截取前面50条结果。

应该能看到,程序中使用了一个$1的的变量,因为foreach总会创建一个Tuple,而在COUNT()没有特别的指出别名,因此应该是匿名的,匿名的变量可以用$取出值,下标总是从0开始。Pig Latin是可以用as 强调别名的,这和SQL的AS是一样的。

运行该程序用的时间明显长了很多。运行结果如:

(the,32)
(and,29)
(of,21)
(that,12)
(in,12)
(to,11)
(is,10)
(it,9)
(a,9)
(as,7)
(for,6)
(you,5)
(will,4)
(The,4)
(value,3)
(which,3)
现在的结果明显有意义了很多。我在第一次运行这个程序的时候,还抛出了OutofMemory的异常,因此还更改了Pig的配置文件。PigHome/conf/pig.properties.在后边增加这样的配置:

pig.cachedbag.memusage=0
io.sort.mb=40
io.sort.record.percent=0.1
Pig排序时需要很大的内存,通过参数可以把部分数据临时序列化到硬盘,具体的意义可以上Google搜。

以前玩Hadoop的朋友,是不是觉得Pig能简化一些Mapreduce的开发呢? 

© 著作权归作者所有

震秦
粉丝 190
博文 34
码字总数 35126
作品 0
西安
架构师
私信 提问
Apache Pig学习笔记(二)

主要整理了一下,pig里面的一些关键词的含义和用法,pig虽然是一种以数据流处理为核心的框架,但数据库的大部分关键词和操作,在pig里面基本上都能找到对应的函数,非常灵活与简洁,春节前的...

九劫散仙
2015/02/13
0
0
Pig安装讲解

Pig 简介: Pig 是 Apache 项目的一个子项目,Pig 提供了一个支持大规模数据分析的平台,Pig 突出的特点就是它的结构经得起大量并行任务的检验,使得它能够处理大规模数据集 Pig 特点: Pig ...

菜鸟的征程
2018/01/10
0
0
Hadoop Pig学习笔记(一) 各种SQL在PIG中实现

我这里以Mysql 5.1.x为例,Pig的版本是0.8 同时我将数据放在了两个文件,存放在/tmp/datafile1和/tmp/datafile2中.文件内容如下: tmpfile1: zhangsan 23 1 lisi 24 1 wangmazi 30 1 meinv 18 ...

行走在路上
2014/07/09
0
0
MySql 语句大全:创建、授权、查询、修改等 -- delete

一、用户创建、权限、删除 1、连接MySql操作 连接:mysql -h 主机地址 -u 用户名 -p 用户密码 (注:u与root可以不用加空格,其它也一样) 断开:exit (回车) 打开cmd,输入 mysql -h 127.0...

xrzs
2012/09/18
0
0
Apache Pig 架构

用于使用Pig分析Hadoop中的数据的语言称为 Pig Latin ,是一种高级数据处理语言,它提供了一组丰富的数据类型和操作符来对数据执行各种操作。 要执行特定任务时,程序员使用Pig,需要用Pig L...

h8b6pk7m7r8
2017/11/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

非webpack require.js + vue + vueRouter + iView 实现按需加载

适合一个人开发的时候,在整个php框架下,又想单页,又可以直接后端assign变量穿透到模板。又不想写接口搞前后分离脚手架一大堆npm 包, 在php模板下 引入require.js <!DOCTYPE html><html...

一箭落旄头
9分钟前
2
0
新特性解读 | MySQL 8.0 窗口函数详解

原创作者: 杨涛涛 背景 一直以来,MySQL 只有针对聚合函数的汇总类功能,比如MAX, AVG 等,没有从 SQL 层针对聚合类每组展开处理的功能。不过 MySQL 开放了 UDF 接口,可以用 C 来自己写UDF...

爱可生
14分钟前
0
0
23.5 jumpserver介绍

23.5 jumpserver介绍 开源堡垒机jumpserver介绍: 官网www.jumpserver.org Jumpserver是一款使用Python, Django开发的开源跳板机系统, 助力互联网企业高效 用户、资产、权限、审计 管理 Auth...

oschina130111
21分钟前
2
0
Spring Cloud 入门教程(七): 消息总线(Spring Cloud Bus)(Greenwich.RELEASE)

参考网址:https://blog.csdn.net/forezp/article/details/81041062,由于此文中作者基于git和rabbitMq,为了适应内网我改造为基于mysql和kafka 一、准备工作 1、安装kafka 参考这个:kafka...

pipi1919
21分钟前
1
0
用人工智能改变企业与客户的连接方式

  随着以AI人工智能技术为主的新一代信息技术的快速商业化落地,我国的数字经济正高歌猛进。2017年我国数字经济对GDP的贡献率为55%,接近甚至超越了某些发达国家水平,2018年我国数字经济规...

琴殇的
25分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部