Install

首先是 Mac OS 下的安装

1
2
 export JAVA_HOME=$(/usr/libexec/java_home)
brew install pig

Run

Pig 运行分为两种模式,如果需要在本地调试的话,可以使用 shell 模式。

通过运行下面的 command 就行了

Shell mode

1
 pig -x local

Count Words

下面我们用个简单的统计单词次数的例子做进入 pig 世界的 hello world。

首先我们在网上随便找一篇文章做实验。

word.txt

1
2
3
Thanks again for the great answers and links! Some people comment that it is hard to satisfy the criteria because core algorithms are
so pervasive that it's hard to point to a specific use. I see the difficulty. But I think it is worthwhile to come up with specific
examples because in my experience telling people: "Look, algorithms are important because they are just about everywhere!" does not work

接下来我们进入 shell 模式,一行行输入下面的语句来看结果。

1
2
3
4
5
6
7
8
9
10
11
input_file =  load 'words.txt' as (line);

/* TOKENIZE: split line into word column */
words = FOREACH input_file GENERATE FLATTEN(TOKENIZE(line)) as word; grpd = GROUP words by word; cntd = FOREACH grpd GENERATE group, COUNT(words); /* print result */
dump cntd;

最后键入 dump cntd 的时候可以看到单词数目已经统计出来了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(answers,1)
(because,3)
(comment,1)
(people:,1)
(satisfy,1)
(telling,1)
(criteria,1)
(examples,1)
(specific,2)
(important,1)
(pervasive,1)
(algorithms,2)
(experience,1)
(worthwhile,1)
(difficulty.,1)
(everywhere!,1)

More Complicate Example

Pig 作为一简单实用的 hadoop 操作语言,同 SQL 的语法类似,支持 join, filter, group by 等操作.

下面我们用个更复杂的例子来看看这门语言的有趣的地方。

我们首先伪造一部分数据,这些数据以空格分开
- 第一行代表用户id
- 第二行 type: 其中 p 代表用户看过改页面,c 代表用户点击广告
- 第三行 用户看过的url

1
2
3
4
5
6
7
8
9
10
    user1 p news.21cn.com/social/daqian/2008/05/29/4777194_1.shtml
user2 c www.6wei.net/dianshiju/????\xa1\xe9|????do=index
user1 p www.shanziba.com/
user1 p download.it168.com/18/1805/13947/13947_3.shtml
user2 p you.video.sina.com.cn/b/5924814-1246200450.html
user3 c www.shanziba.com/
user1 c download.it168.com/18/1805/13947/13947_3.shtml
user3 p you.video.sina.com.cn/b/5924814-1246200450.html
user1 c
user3 p

首先我们想统计每个用户在我们的log 中发生了多少次行为。

1
2
3
4
5
6
7
8
9
10
Users = LOAD 'server_log.txt' USING PigStorage(' ') as (user ,type ,url) ;

/* filter bad log */
Fltrd = FILTER Users by url is not null; Grpd = GROUP Fltrd by user; Cntd = foreach Grpd generate FLATTEN(group), COUNT(Fltrd.user); DUMP Cntd;

输出如下:

1
2
3
(user1,4)
(user2,2)
(user3,2)

如果我们想更进一步,查看每个用户发生了多少次click 和多少次 page view. 则稍显麻烦。

首先我们要把page event 和 click event 分开,这可以通过 pig 的 split 实现。

接着针对分开的 P_EVENT 和 C_EVENT 做 Group

最后在使用 Join 命令把 Cntd_P 和 Cntd_C 按用户 join 起来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Users = LOAD 'server_log.txt' USING PigStorage(' ') as (user ,type ,url) ;

Fltrd = FILTER Users by url is not null;

SPLIT Fltrd INTO P_EVENT if type == 'p',
C_EVENT if type == 'c'; Grpd_P = GROUP P_EVENT by user;
Grpd_C = GROUP C_EVENT by user; Cntd_P = foreach Grpd_P generate FLATTEN(group) as group_p,COUNT(P_EVENT.user) as p_count;
Cntd_C = foreach Grpd_C generate FLATTEN(group) as group_c, COUNT(C_EVENT.user) as c_count; Jnd = JOIN Cntd_P BY group_p, Cntd_C BY group_c; Cntd_P_C = FOREACH Jnd GENERATE Cntd_P::group_p, Cntd_P::p_count,Cntd_C::c_count; DUMP Cntd_P_C;

Tips

总体来看 pig 作为一门类 SQL 语言,其灵活性和方便性在处理较为简单的大数据任务时,相比传统的 hadoop job 有着不可比拟的优势。

但 pig 也有缺点,比如 debug 信息不明确等。

在日常写 pig 脚本时,可以通过 Describe 的方式来查看当前结果的结构来方便编码。

Pig On Mac的更多相关文章

  1. hadoop: hive 1.2.0 在mac机上的安装与配置

    环境:mac OS X Yosemite + hadoop 2.6.0 + hive 1.2.0 + jdk 1.7.0_79 前提:hadoop必须先安装,且处于运行状态(伪分式模式或全分布模式均可 ...

  2. 总结:Mac前端开发环境的搭建(配置)

    新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...

  3. JAVA for mac 的学习之路

    要学习一门新技术,首先得下载相关的工具. 一 . 下载相关工具 1. 下载 jdk formac 下载地址为:http://www.oracle.com/technetwork/java/javase ...

  4. docker for mac 学习记录

    docker基本命令 docker run -d -p 80:80 --name webserver nginx 运行容器并起别名 docker ps 展示目前启动的容器 docker ps -a 展 ...

  5. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  6. mac下安装及配置tomcat

    mac下的软件不像windows下的程序那样写注册表,对于tomcat的安装来说,在mac下是名符其实的绿色软件,具体操作如下: 1.到 apache官方主页 下载完整 tar.gz文件包.(没有专门 ...

  7. Mac OS 使用 Vagrant 管理虚拟机(VirtualBox)

    Vagrant(官网.github)是一款构建虚拟开发环境的工具,支持 Window,Linux,Mac OS,Vagrant 中的 Boxes 概念类似于 Docker(实质是不同的),你可以把它看 ...

  8. Mac OS、Ubuntu 安装及使用 Consul

    Consul 概念(摘录): Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,比如 Airbnb 的 SmartStac ...

  9. MAC Osx PHP安装指导

    php.ini的位置 Mac OS X中没有默认的php.ini文件,但是有对应的模版文件php.ini.default,位于/private/etc/php.ini.default 或者说 /etc ...

随机推荐

  1. DataSet 中的数据排序 及 DataRow装成DataTable

    1.DataSet 中的数据排序 DataSet ds = new DataSet(); // 获取当前排口的数据 ds = _xiaobill.GetHistoryData(yinZiBianm, ...

  2. AprioriTID algorithm

    What is AprioriTID? AprioriTID is an algorithm for discovering frequent itemsets (groups of items ap ...

  3. rpm包下载网站

    摘自http://blog.sina.com.cn/s/blog_4942055d0100031a.html rpm包下载网站 http://www.rpmfind.net http://www.rp ...

  4. javascript第十七课:this使用

    例如,我们要一个元素的值 function f1(){ alert(this.id); } document.getElementByid('#id').onclick=f1;  //将函数赋值给事件

  5. List<T>用法总结【转】

    List<T>用法总结 static void Main(string[] args) { Person p1 = new Person( "aladdin" , 20 ...

  6. 有用的jQuery布局插件推荐

    网页设计中排版也是很重要的,但有些比较难的网页排版我们可以用一些jQuery来实现,今天文章中主要分享一些有用的jQuery布局插件,有类似Pinterest流布局插件.友荐的滑动提示块以及其它jQu ...

  7. mybatis中使用log4j

    Mybatis默认使用有slf4j,所以必须加入下面的依赖,否则可能出现日志无法打印sql或者无法打印resultset. <dependency> <groupId>org. ...

  8. repeater 一个td多个div显示图片

    <table class="table table-bordered table-responsive"> <tbody> <asp:Repeater ...

  9. MVC零基础学习整理(一)

    1.Mvc程序的启动页的设置:修改程序的Global.asax文件

  10. (原)工具篇-利用fis压缩项目

    fis3 1.添加 fis-conf.js 到项目根目录中 fis-conf.js 内容如下 : //配置MD5版本控制 fis.match('*.{js,css,png,jpg}', { useHa ...