- 浏览: 2147190 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
原创不易,转载请务必注明,原创地址,谢谢配合!
http://qindongliang.iteye.com/
Pig系列的学习文档,希望对大家有用,感谢关注散仙!
Apache Pig的前世今生
Apache Pig如何自定义UDF函数?
Apache Pig5行代码怎么实现Hadoop的WordCount?
Apache Pig入门学习文档(一)
Apache Pig学习笔记(二)
Apache Pig学习笔记之内置函数(三)
玩转大数据系列之Apache Pig如何与Apache Lucene集成(一)
玩转大数据系列之Apache Pig如何与Apache Solr集成(二)
玩转大数据系列之Apache Pig如何与MySQL集成(三)
玩转大数据系列之如何给Apache Pig自定义存储形式(四)
玩转大数据系列之Apache Pig如何通过自定义UDF查询数据库(五)
如何使用Pig集成分词器来统计新闻词频?
在Hadoop的生态系统中,如果我们要离线的分析海量的数据,大多数人都会选择Apache Hive或Apache Pig,在国内总体来说,Hive使用的人群占比比较高, 而Pig使用的人相对来说,则少的多,这并不是因为Pig不成熟,不稳定,而是因为Hive提供了类数据库SQL的查询语句,使得大多人上手Hive非常容易,相反而Pig则提供了类Linux shell的脚本语法,这使得大多数人不喜欢使用。
如果在编程界,统计一下会SQL和会shell,那个人数占的比重大,散仙觉得,毫无疑问肯定是SQL语句了。因为有相当一部分编程人员是不使用Linux的,而是微软的的一套从C#,到ASP.NET,SQL Server再到Windows的专用服务器 。
OK,扯远了,赶紧回来,使用shell的攻城师们,我觉得都会爱上它的,因为在linux系统中,没有比shell更简洁易用了,如果再配上awk和sed更是如虎添翼了。
我们都知道shell是支持函数调用的,这一点和JavaScript是非常类似的,通过定义函数我们可以重复使用某个功能,而不用再次大量编码,其中,把变的东西,分离成参数,不变的东西定义成语句,这样以来,就能够降低编码的冗余和复杂性,试想一下,如果Java里,没有方法,那将会是多么不可思议的一件事。
Pig作为类shell的语言,也支持了函数的方式,封装某个功能,以便于我们重用,这一点相比Hive来说,是一个很好的优势。
下面先看下定义Pig函数(也叫宏命令)定义的语法:
DEFINE (macros) :
支持的参数:
alias pig的标量引用
整形(integer)
浮点型(float)
字符串(String)
下面看几个例子,让我们迅速对它熟悉并掌握,先看下我们的测试数据:
再看下pig脚本:
在上面的脚本中,散仙定义了三个函数,
(1)分组统计数量
(2)自定义输出存储
(3)自定义过滤并结合(1)统计数量
通过这3个例子,让大家对pig函数有一个初步的认识,上面的函数和代码都在一个脚本中,这样看起来不太友好,而且重用性,还没有得到最大发挥,实际上函数和主体脚本是可以分离的,再用的时候,我们只需要导入函数脚本,即可拥有所有的函数功能,这样一来,函数脚本被分离到主脚本外面,就大大增加了函数脚本的重用性,我们也可以再其他脚本中引用,而且函数脚本中也可以再次引用其他的函数脚本,但前提是不能够,递归引用,这样Pig语法在执行时,是会报错的,下面看下分离后的脚本文件:
一:函数脚本文件
二,主体脚本文件
需要注意的是,导入的函数文件,需要用单引号引起来,这样我们就完成了pig函数的重用,是不是非常类似shell的语法呢?有兴趣的同学们,赶紧体验一把吧!
想了解更多有关电商互联网公司的搜索技术和大数据技术的使用,请欢迎扫码关注微信公众号:我是攻城师(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!
http://qindongliang.iteye.com/
Pig系列的学习文档,希望对大家有用,感谢关注散仙!
Apache Pig的前世今生
Apache Pig如何自定义UDF函数?
Apache Pig5行代码怎么实现Hadoop的WordCount?
Apache Pig入门学习文档(一)
Apache Pig学习笔记(二)
Apache Pig学习笔记之内置函数(三)
玩转大数据系列之Apache Pig如何与Apache Lucene集成(一)
玩转大数据系列之Apache Pig如何与Apache Solr集成(二)
玩转大数据系列之Apache Pig如何与MySQL集成(三)
玩转大数据系列之如何给Apache Pig自定义存储形式(四)
玩转大数据系列之Apache Pig如何通过自定义UDF查询数据库(五)
如何使用Pig集成分词器来统计新闻词频?
在Hadoop的生态系统中,如果我们要离线的分析海量的数据,大多数人都会选择Apache Hive或Apache Pig,在国内总体来说,Hive使用的人群占比比较高, 而Pig使用的人相对来说,则少的多,这并不是因为Pig不成熟,不稳定,而是因为Hive提供了类数据库SQL的查询语句,使得大多人上手Hive非常容易,相反而Pig则提供了类Linux shell的脚本语法,这使得大多数人不喜欢使用。
如果在编程界,统计一下会SQL和会shell,那个人数占的比重大,散仙觉得,毫无疑问肯定是SQL语句了。因为有相当一部分编程人员是不使用Linux的,而是微软的的一套从C#,到ASP.NET,SQL Server再到Windows的专用服务器 。
OK,扯远了,赶紧回来,使用shell的攻城师们,我觉得都会爱上它的,因为在linux系统中,没有比shell更简洁易用了,如果再配上awk和sed更是如虎添翼了。
我们都知道shell是支持函数调用的,这一点和JavaScript是非常类似的,通过定义函数我们可以重复使用某个功能,而不用再次大量编码,其中,把变的东西,分离成参数,不变的东西定义成语句,这样以来,就能够降低编码的冗余和复杂性,试想一下,如果Java里,没有方法,那将会是多么不可思议的一件事。
Pig作为类shell的语言,也支持了函数的方式,封装某个功能,以便于我们重用,这一点相比Hive来说,是一个很好的优势。
下面先看下定义Pig函数(也叫宏命令)定义的语法:
DEFINE (macros) :
支持的参数:
alias pig的标量引用
整形(integer)
浮点型(float)
字符串(String)
下面看几个例子,让我们迅速对它熟悉并掌握,先看下我们的测试数据:
1,张三,男,23,中国 2,张三,女,32,法国 3,小花,男,20,英国 4,小红,男,16,中国 5,小红,女,25,洛阳 6,李静,女,25,中国河南安阳 7,王强,男,11,英国 8,张飞,男,20,美国
再看下pig脚本:
--定义pig函数1 支持分组统计数量 DEFINE group_and_count (A,group_key,number_reduces) RETURNS B { d = group $A by $group_key parallel $number_reduces; $B = foreach d generate group, COUNT($1); }; --定义pig函数2 支持排序 --A 关系引用标量 --order_field 排序的字段 --order_type 排序方式 desc ? asc ? --storedir 存储的HDFS路径 --空返回值 define my_order(A,order_field,order_type,storedir) returns void { d = order $A by $order_field $order_type ; store d into '$storedir' ; }; --定义pig函数3,支持filter过滤,以及宏命令里面调用 --定义过滤操作 define myfilter (A,field,count) returns B{ b= filter $A by $field > $count ; $B = group_and_count(b,'sex',1); }; a = load '/tmp/dongliang/318/person' using PigStorage(',') AS (id:int,name:chararray,sex:chararray,age:int,address:chararray) ; --------pig函数1测试----------------- --定义按名字分组 --bb = group_and_count(a,name,1); --定义按性别分组 --cc = group_and_count(a,sex,1); --dump bb; --dump cc; -------pig函数2测试------------------ --按年龄降序 --my_order(a,age,'desc','/tmp/dongliang/318/z'); --dump a; -------pig函数3测试------------------ --过滤年龄大于20的,并按性别,分组统计数量 r = myfilter(a,'age',20); dump r;
在上面的脚本中,散仙定义了三个函数,
(1)分组统计数量
(2)自定义输出存储
(3)自定义过滤并结合(1)统计数量
通过这3个例子,让大家对pig函数有一个初步的认识,上面的函数和代码都在一个脚本中,这样看起来不太友好,而且重用性,还没有得到最大发挥,实际上函数和主体脚本是可以分离的,再用的时候,我们只需要导入函数脚本,即可拥有所有的函数功能,这样一来,函数脚本被分离到主脚本外面,就大大增加了函数脚本的重用性,我们也可以再其他脚本中引用,而且函数脚本中也可以再次引用其他的函数脚本,但前提是不能够,递归引用,这样Pig语法在执行时,是会报错的,下面看下分离后的脚本文件:
一:函数脚本文件
--定义pig函数1 支持分组统计数量 --A 关系引用标量 --group_key 分组字段 --使用reduce的个数 --返回最终的引用结果 DEFINE group_and_count (A,group_key,number_reduces) RETURNS B { d = group $A by $group_key parallel $number_reduces; $B = foreach d generate group, COUNT($1); }; --定义pig函数2 支持排序 --A 关系引用标量 --order_field 排序的字段 --order_type 排序方式 desc ? asc ? --storedir 存储的HDFS路径 --空返回值 define my_order(A,order_field,order_type,storedir) returns void { d = order $A by $order_field $order_type ; store d into '$storedir' ; }; --定义pig函数3,支持filter过滤,以及宏命令里面调用 --A 关系引用标量 --field 过滤的字段 --count 阈值 --返回最终的引用结果 define myfilter (A,field,count) returns B{ b= filter $A by $field > $count ; $B = group_and_count(b,'sex',1); }; [search@dnode1 pigmacros]$
二,主体脚本文件
--导入pig公用的函数库 import 'function.pig' ; a = load '/tmp/dongliang/318/person' using PigStorage(',') AS (id:int,name:chararray,sex:chararray,age:int,address:chararray) ; --------pig函数1测试----------------- --定义按名字分组 --bb = group_and_count(a,name,1); --定义按性别分组 --cc = group_and_count(a,sex,1); --dump bb; --dump cc; -------pig函数2测试------------------ --按年龄降序 --my_order(a,age,'desc','/tmp/dongliang/318/z'); --dump a; -------pig函数3测试------------------ --过滤年龄大于20的,并按性别,分组统计数量 r = myfilter(a,'age',20); dump r;
需要注意的是,导入的函数文件,需要用单引号引起来,这样我们就完成了pig函数的重用,是不是非常类似shell的语法呢?有兴趣的同学们,赶紧体验一把吧!
想了解更多有关电商互联网公司的搜索技术和大数据技术的使用,请欢迎扫码关注微信公众号:我是攻城师(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!
发表评论
-
Apache Tez0.7编译笔记
2016-01-15 16:33 2429目前最新的Tez版本是0.8,但还不是稳定版,所以大家还 ... -
Bug死磕之hue集成的oozie+pig出现资源任务死锁问题
2016-01-14 15:52 3755这两天,打算给现有的 ... -
Apache Pig中如何使用Replace函数
2015-11-17 18:48 1480今天分享一个小案例, ... -
Apache Pig的UDF返回值问题
2015-11-11 16:34 1466今天写了关于Pig的EvalFunc UDF函数,结果一执行 ... -
Pig0.15集成Tez,让猪飞起来
2015-06-29 19:45 17861,Tez是什么? Tez是Hortonworks公司开源 ... -
CDH-Hadoop2.6+ Apache Pig0.15安装记录
2015-06-26 20:06 26891,使用CDH的hadoop里面有对应的组件Pig,但版本较低 ... -
Pig配置vim高亮
2015-05-01 17:14 1567(1) 下载文末上传的压缩包,上到对应的linux机器上,并 ... -
Hadoop2.2如何集成Apache Pig0.12.1?
2015-05-01 16:48 908散仙假设你的Hadoop环境已经安装完毕 (1)到ht ... -
Apache Pig和Solr问题笔记(一)
2015-04-02 13:35 2000记录下最近两天散仙在工作中遇到的有关Pig0.12.0和Sol ... -
Pig使用问题总结
2015-03-29 18:39 10201,如果是a::tags#'pic'作为参数,传递给另一个函 ... -
Apache Pig字符串截取实战小例子
2015-03-13 17:23 2232记录一个Pig字符串截取的实战小例子: 需求如下,从下面的字 ... -
玩转大数据系列之Apache Pig如何通过自定义UDF查询数据库(五)
2015-03-12 21:06 1873GMV(一定时间内的成交 ... -
玩转大数据系列之如何给Apache Pig自定义存储形式(四)
2015-03-07 20:35 1122Pig里面内置大量的工具函数,也开放了大量的接口,来给我们开发 ... -
玩转大数据系列之Apache Pig如何与MySQL集成(三)
2015-03-07 19:43 2561上篇介绍了如何把Pig的结果存储到Solr中,那么可能就会有朋 ... -
玩转大数据系列之Apache Pig如何与Apache Solr集成(二)
2015-03-06 21:52 1472散仙,在上篇文章中介绍了,如何使用Apache Pig与Luc ... -
玩转大数据系列之Apache Pig如何与Apache Lucene集成(一)
2015-03-05 21:54 2849在文章开始之前,我们 ... -
Apache Pig学习笔记之内置函数(三)
2015-03-03 19:53 48261 简介 Pig附带了一些 ... -
Apache Pig学习笔记(二)
2015-02-13 19:23 3053主要整理了一下,pig里 ... -
你有一个好的归档习惯吗?
2015-02-11 22:01 1827备忘和扯一扯最近散仙 ... -
Apache Pig入门学习文档(一)
2015-01-20 20:28 31741,Pig的安装 (一)软件要求 (二)下载Pig ...
相关推荐
大数据--Apache Spark编程详解
大数据+Apache Doris资料包+示例代码大数据+Apache Doris资料包+示例代码大数据+Apache Doris资料包+示例代码大数据+Apache Doris资料包+示例代码大数据+Apache Doris资料包+示例代码大数据+Apache Doris资料包+示例...
3-3.新一代大数据调度+-Apache+DolphinScheduler架构演进+&+Roadmap.pdf
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 ...
大数据--Apache Spark 入门知识
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 ...
apache pig 基础及应用,urldecode row_number web日志分析 根据 用户行为 做出 简易的 相似度 判断。
大数据之路 Apache Pulsar 调研(全面).docx
大数据--Apache Spark实用详解
大数据-- Apache Spark Semi-Structured data
Apache Tomcat 6高级编程part1
TutorialsPoint Apache Pig 介绍.epub
apache日志hadoop大数据 hive与hbase是如何整合使用的
Hadoop 2012 大数据大会 的资料,Apache pig性能优化
大数据技术分享 Apache Kylin-Hadoop上的大规模OLAP联机分析处理平台 共38页.pptx
福建师范大学精品大数据导论课程系列 (6.5.1)--5.2 ApacheSpark之一.pdf 福建师范大学精品大数据导论课程系列 (6.6.1)--5.2 ApacheSpark之二.pdf 福建师范大学精品大数据导论课程系列 (6.7.1)--5.2 ApacheSpark之三....
福建师范大学精品大数据导论课程系列 (6.5.1)--5.2 ApacheSpark之一.pdf 福建师范大学精品大数据导论课程系列 (6.6.1)--5.2 ApacheSpark之二.pdf 福建师范大学精品大数据导论课程系列 (6.7.1)--5.2 ApacheSpark之三....
福建师范大学精品大数据导论课程系列 (6.5.1)--5.2 ApacheSpark之一.pdf 福建师范大学精品大数据导论课程系列 (6.6.1)--5.2 ApacheSpark之二.pdf 福建师范大学精品大数据导论课程系列 (6.7.1)--5.2 ApacheSpark之三....
福建师范大学精品大数据导论课程系列 (6.5.1)--5.2 ApacheSpark之一.pdf 福建师范大学精品大数据导论课程系列 (6.6.1)--5.2 ApacheSpark之二.pdf 福建师范大学精品大数据导论课程系列 (6.7.1)--5.2 ApacheSpark之三....
福建师范大学精品大数据导论课程系列 (6.5.1)--5.2 ApacheSpark之一.pdf 福建师范大学精品大数据导论课程系列 (6.6.1)--5.2 ApacheSpark之二.pdf 福建师范大学精品大数据导论课程系列 (6.7.1)--5.2 ApacheSpark之三....