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. java性能优化技巧

    在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 1. 尽量使用final修饰符. 带有final修饰符的类是不可派生的. ...

  2. SQL Server 存储过程自启动

    前期准备: use master; create table LoginLog(LoginName nvarchar(32),LoginTime datetime); create procedure ...

  3. MVC 后台DataTable 前台遍历

    /// <summary> /// 多级审批流展示 /// </summary> /// <returns></returns> public Acti ...

  4. 如何自定义MVC控件?

    今天公司要写学习总结,想着想着还是先写一篇关于MVC内部什么东东的博客整理整理再发表吧,一举两得. 之前写过了路由.过滤器等.今天就研究一下怎么自定义MVC控件吧. 本人技术小菜,不喜勿喷.....( ...

  5. 红外遥控系统原理及单片机软件解码程序,我的编写经历(C版本)

    应该说现在每一块开发板都带有红外模块,并且大都配置了相应的程序.但其实自己动手写解码程序,更能锻炼自己所学,且不谈程序写的如何,这个过程中肯定是受益良多的.现在我就把我花一下午写出的解码程序与大家分享 ...

  6. MFC 操作控件数据

    在MFC中有多种获取控件数据的方法 1.GetWindowText()和SetWindowText()函数   ],ch2[],ch3[]; GetDlgItem(IDC_EDIT1)->Get ...

  7. Boost 1.61.0 Library Documentation

    http://www.boost.org/doc/libs/1_61_0/ Boost 1.61.0 Library Documentation Accumulators Framework for ...

  8. 2014第7周四excel多列文本复制技巧

    刚才win8.1强制安装更新后重启,然后一直显示“安装更新失败正在,正在撤销更改,请不要关闭计算机”,等了很久还是不行,我还是强制按下了电源按钮,然后再次开机还是这样,实在没办法只能等,过了N久后没想 ...

  9. Android常用代码

    1.图片旋转 Bitmap bitmapOrg = BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable. ...

  10. Google map v3 using simple tool file google.map.util.js v 1.1

    /** * GOOGLE地图开发使用工具 * @author BOONYACHENGDU@GMAIL.COM * @date 2013-08-23 * @notice 地图容器的z-index不能小于 ...