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. Asp.net MVC 之 ActionResult

    Action运行完后,回传的值通过ActionResult 类别或者其衍生的类别操作.ActionResult是一个抽象类,因此,Asp.net MVC 本身就实作了许多不同类型的ActionResu ...

  2. bokeh-scala

    使用bokeh-scala进行数据可视化 目录 前言 bokeh简介及胡扯 bokeh-scala基本代码 我的封装 总结 一.前言 最近在使用spark集群以及geotrellis框架(相关文章见h ...

  3. mysql各种日志对应的配置项

    01.error_log --log-error=<file_name> 02.general_log --general-log-file=<file_name> --gen ...

  4. hightchart or hightstock 格式Y数据

    hightchart or hightstock 格式Y数据,鼠标放在上面显示两位小数 方法一: tooltip: { shared: true, crosshairs: true , formatt ...

  5. QReadWriteLock读写锁的一点测试(它是逻辑锁,并没有与实物相联系),只有锁住了读,才允许再次读,否则一概不允许

    QReadWriteLock m_lock; void MyWidget::Button1(){ m_lock.lockForRead(); ShowMessage(tr("111" ...

  6. cp | mv | rm

    linux下文件的复制.移动与删除命令为:cp,mv,rm 一.文件复制命令cp 命令格式: cp [-adfilprsu] 源文件(source) 目标文件(destination) cp [opt ...

  7. Oracle 表的常见操作

    --创建表并指定表空间 create table goods( id VARCHAR2(20) primary key, name VARCHAR2(20) NOT NULL, price NUMBE ...

  8. JavaScript判断图片是否加载完成

    一.load事件 <!DOCTYPE HTML><html> <head>     <meta charset="utf-8">   ...

  9. RDLC报表系列(六) 多图表-折线图和柱状图

    美好的一天开始了,这篇是RDLC系列的最后一篇文章,我的小项目也已经release,正在测试中. 1.新建demo3.aspx和demo3.rdlc文件 2.往rdlc文件中拖一个图标控件,在弹出的窗 ...

  10. web中通过注释判断浏览器<!--[if !IE]><!--[if IE]><!--[if lt IE 6]><!--[if gte IE 6]>版本

    <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--><!--[if IE]> 所有的IE可识别 <![e ...