- 浏览: 2188534 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 2536目前最新的Tez版本是0.8,但还不是稳定版,所以大家还 ... -
Bug死磕之hue集成的oozie+pig出现资源任务死锁问题
2016-01-14 15:52 3844这两天,打算给现有的 ... -
Apache Pig中如何使用Replace函数
2015-11-17 18:48 1528今天分享一个小案例, ... -
Apache Pig的UDF返回值问题
2015-11-11 16:34 1522今天写了关于Pig的EvalFunc UDF函数,结果一执行 ... -
Pig0.15集成Tez,让猪飞起来
2015-06-29 19:45 18291,Tez是什么? Tez是Hortonworks公司开源 ... -
CDH-Hadoop2.6+ Apache Pig0.15安装记录
2015-06-26 20:06 27371,使用CDH的hadoop里面有对应的组件Pig,但版本较低 ... -
Pig配置vim高亮
2015-05-01 17:14 1667(1) 下载文末上传的压缩包,上到对应的linux机器上,并 ... -
Hadoop2.2如何集成Apache Pig0.12.1?
2015-05-01 16:48 977散仙假设你的Hadoop环境已经安装完毕 (1)到ht ... -
Apache Pig和Solr问题笔记(一)
2015-04-02 13:35 2070记录下最近两天散仙在工作中遇到的有关Pig0.12.0和Sol ... -
Pig使用问题总结
2015-03-29 18:39 11171,如果是a::tags#'pic'作为参数,传递给另一个函 ... -
Apache Pig字符串截取实战小例子
2015-03-13 17:23 2355记录一个Pig字符串截取的实战小例子: 需求如下,从下面的字 ... -
玩转大数据系列之Apache Pig如何通过自定义UDF查询数据库(五)
2015-03-12 21:06 1933GMV(一定时间内的成交 ... -
玩转大数据系列之如何给Apache Pig自定义存储形式(四)
2015-03-07 20:35 1189Pig里面内置大量的工具函数,也开放了大量的接口,来给我们开发 ... -
玩转大数据系列之Apache Pig如何与MySQL集成(三)
2015-03-07 19:43 2630上篇介绍了如何把Pig的结果存储到Solr中,那么可能就会有朋 ... -
玩转大数据系列之Apache Pig如何与Apache Solr集成(二)
2015-03-06 21:52 1533散仙,在上篇文章中介绍了,如何使用Apache Pig与Luc ... -
玩转大数据系列之Apache Pig如何与Apache Lucene集成(一)
2015-03-05 21:54 2920在文章开始之前,我们 ... -
Apache Pig学习笔记之内置函数(三)
2015-03-03 19:53 48891 简介 Pig附带了一些 ... -
Apache Pig学习笔记(二)
2015-02-13 19:23 3137主要整理了一下,pig里 ... -
你有一个好的归档习惯吗?
2015-02-11 22:01 1895备忘和扯一扯最近散仙 ... -
Apache Pig入门学习文档(一)
2015-01-20 20:28 32401,Pig的安装 (一)软件要求 (二)下载Pig ...
相关推荐
大数据+Apache Doris资料包+示例代码大数据+Apache Doris资料包+示例代码大数据+Apache Doris资料包+示例代码大数据+Apache Doris资料包+示例代码大数据+Apache Doris资料包+示例代码大数据+Apache Doris资料包+示例...
合肥工业大学的这门“Python玩转大数据”课程,旨在让学生掌握如何利用Python进行大数据分析和处理,从而更好地理解和解决实际问题。 一、Python大数据处理基础 1. Numpy库:Numpy是Python中用于科学计算的核心库...
### 大数据——Apache Spark编程详解 #### 一、引言与背景介绍 在当今数字化时代,随着数据量的爆炸性增长,如何高效地处理这些海量数据成为了企业和研究机构面临的一项重大挑战。Apache Spark作为一款开源的大...
自 2021 年 03 月 18 日正式成为 Apache 顶级项目以来,DolphinScheduler 致力于在数据工作流编排中“解决复杂的大数据任务依赖及触发关系,让各种大数据任务类型开箱即用”。目前,已经有 400+ 公司在生产上使用 ...
apache pig 基础及应用,urldecode row_number web日志分析 根据 用户行为 做出 简易的 相似度 判断。
### 大数据——Apache Spark 入门知识 在当今信息化高度发达的时代,数据量的爆炸性增长已经成为一种常态。随着互联网、移动设备、科学实验等各个领域的数据不断涌现,如何高效处理这些海量数据成为了亟待解决的...
在本压缩包“Python玩转大数据的大作业.zip”中,我们可以看到一个名为“zgl_resource”的文件,这可能是一个包含一系列资源的文件夹,用于支持一个关于使用Python处理大数据的项目或课程作业。Python作为一门强大的...
Apache Pig是在Hadoop之上构建的一个工具,它将Pig Latin脚本转换为一系列的MapReduce作业,然后在Hadoop集群上执行这些作业。这不仅简化了大数据处理的复杂性,还提高了数据处理的效率和速度。Hadoop提供了分布式...
### 大数据与Apache Spark实用详解 在当前的数据驱动时代,大数据已经成为企业成功的关键因素之一。随着数据量的不断增长,传统的数据处理方法已经无法满足需求。为了应对这些挑战,分布式计算框架应运而生,其中...
总之,"尚硅谷大数据技术之企业SQL面试题"是一个全面复习和提升SQL技能的宝贵资源,无论是对于正在找工作的专业人士还是想要提升自己大数据技能的开发者,都是一份非常实用的学习材料。通过深入学习和实践,可以增强...
Apache Pig是一种高级数据流语言和执行框架,用于处理和分析大数据,其运行在Hadoop上。Pig提供了一种名为Pig Latin的数据处理语言,它是一种类SQL语言,可以让用户编写更简洁的代码来处理数据,相对于传统的...
在本套内部Hadoop系列培训资料中,我们将深入探讨大数据技术的核心——Hadoop及其生态系统,包括Spark、Hive、Storm、Hbase和Sqoop等关键组件。这些工具和框架共同构建了大数据解决方案的基础。 首先,Hadoop是...
本主题将深入探讨“Hadoop高级编程之构建与实现大数据解决方案”,旨在为开发者提供全面而深入的理解,如何利用Hadoop高效地处理海量数据。 首先,Hadoop是由Apache软件基金会开发的一个开源框架,主要用于存储和...
通过这些资料,读者可以从理论到实践,从基础到高级,全方位地了解和掌握大数据技术,无论是对于求职者提升技能,还是对于从业者深化理解,都是极其有价值的资源。大数据的海洋深邃广阔,这个精选资料包为探索这片...
Pig之所以受到青睐,是因为它简化了数据处理流程,降低了编程的复杂性,并且相较于传统编程语言,可以减少大量的代码量。 在配置Pig语法高亮时需要注意的是,在Windows环境下可能没有直接的插件支持,但是可以通过...
《大数据基础编程、实验和案例教程》是一本深入探讨大数据技术的综合性教材,旨在帮助学习者掌握大数据处理的核心技能和实践经验。本教程涵盖了大数据领域的基础知识,编程语言的应用,以及具体的实验和案例分析,...
大数据技术分享 Apache Kylin-Hadoop上的大规模OLAP联机分析处理平台 共38页.pptx
Scala语言是大数据开发的重要技能之一,尤其在Apache Spark这样的大数据处理框架中,Scala是其主要编程语言。 在尚硅谷出版的《大数据之Scala语言核心编程》中,首先介绍了学习Scala语言的原因和Scala语言诞生的小...
【大数据系列-Hive】 Hive是Apache软件基金会下的一个数据仓库工具,主要设计用于处理和管理大规模的数据集,尤其在大规模分布式计算环境如Hadoop上。Hive提供了SQL-like的查询语言,称为HQL(Hive Query Language...