一、pig:

  pig提供了一个基于Hadoop的并行地执行数据流处理的引擎。它包含了一种脚本语言,称为Pig Latin。(类似SQL)

二、Pig Latin:

  1、注释:

    单行:--  

    多行:/* */

  2、输入和输出:

    加载:load '文件'

        using PigStorage(',');

        as (exchange,symbol,date,dividends);

         //使用内置函数PigStorage函数,指定分隔符为',';还有一个加载函数是TextLoader。

        //采用as指定加载数据的模型。

    存储:store 变量 into '输出文件';

    输出:dump 变量;//打印

  3、关系操作:

    foreach:接受一组表达式,然后将它们应用到每条记录中。比如:加载完所有记录,只保留user和id两个字段。

      A = load 'input' as (user:chararray , id:long , address:chararray);

      B = foreach A generate user,id;

    foreach 语句中的UDF(自定义函数)

    Filter:

    Group ××  by ×× :

    Order by:

    Distinct:

    Join:

    Limit:

  4、自定义函数UDF:

    注册UDF:REGISTER '…….jar‘;

    define命令和UDF:define命令可用于为用户的Java UDF定义一个别名,这样用户就不需要写那么冗长的包名全路径了,它也可以为用户的UDF的构造函数提供参数。

    set:在pig脚本前面加上set ***; 这个命令可在Pig脚本的开头来设置job的参数;

三、例子:

1、使用三目运算符来替换空值

B = FOREACH A GENERATE ((col1 is null) ? - :col1)

2、外连接JOIN:

LEFT:左边的数据全量显示

A = LOAD '1.txt' USING PigStorage('\t') AS (col1:int , col2:chararray);
B = LOAD '2.txt' USING PigStorage('\t') AS ( col1:int , col2:chararray);
C = JOIN A BY col1 LEFT , B BY col1;
DESCRIBE C;
DUMP C;

3、合并文件A和B的数据:

A = LOAD 'A.txt';
B = LOAD 'B.txt';
C = UNION A,B;
DUMP C;

4、表示文件的第一个字段(第一列):$0;

5、pig统计文件的词频:TOKENIZE

-- 统计数据的行数

cd hdfs:///

A = LOAD '/logdata/2012*/*/nohup_*' AS (name:chararray) ;

B = GROUP A BY name;

C = FOREACH B GENERATE group, COUNT(A);

D = ORDER C BY ($);

E = FILTER D BY $ > ;

dump E;

-- 统计单词的个数

A = LOAD'/logdata/20130131/*/*' AS (line: chararray) ;

B = foreach A generate flatten(TOKENIZE((chararray)$)) as word;

C = group B by word;

D = foreach C generate COUNT(B), group;

E = ORDER D BY ($);

F = FILTER E BY $> ;

DUMP F;

TOKENIZE函数:https://www.w3cschool.cn/apache_pig/apache_pig_tokenize.html

举例子:

1.txt;

    i am hadoop
i am hadoop
i am lucene
i am hbase
i am hive
i am hive sql
i am pig

pig代码:

--load文本的txt数据,并把每行作为一个文本
a = load '1.txt' as (f1:chararray);
--将每行数据,按指定的分隔符(这里使用的是空格)进行分割,并转为扁平结构
b = foreach a generate flatten(TOKENIZE(f1, ' '));
--对单词分组
c = group b by $;
--统计每个单词出现的次数
d = foreach c generate group ,COUNT($);
--存储结果数据
stroe d into '$out'

##注意,COUNT函数一定要大写,不然会报错: ERROR org.apache.pig.PigServer- exception during parsing:Error during parsing. Could not resolve count using imports:[, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.]

处理的结果:

    (i,)
(am,)
(pig,)
(sql,)
(hive,)
(hbase,)
(hadoop,)
(lucene,)

取topN功能:

-- 按统计次数降序
e = order d by $ desc;
--取top2
f = limit e ;
--存储结果数据
stroe f into '$out'

 6、pig嵌套循环

https://blog.csdn.net/jameshadoop/article/details/24838915

7、pig传参

A = LOAD '$INPUT_DIR' AS (t0:long, msisdn:chararray, t2:chararray, t3:chararray, t4:chararray,t5:chararray, t6:long, t7:long, t8:long, t9:long, t10:chararray);
B = FOREACH A GENERATE msisdn, t6, t7, t8, t9;
C = GROUP B BY msisdn;
D = FOREACH C GENERATE  group, SUM(B.t6), SUM(B.t7), SUM(B.t8), SUM(B.t9);
STORE D INTO '$OUTPUT_DIR';

pig -p INPUT_DIR=hdfs://mycluster/pig/in -p OUTPUT_DIR=hdfs://mycluster/pig/out  ./schedule.pig
--------------------- 
原文:https://blog.csdn.net/aaronhadoop/article/details/44310633

PIG 命令行传多个参数

PIG 命令行执行脚本,多个参数传递问题终于解决了,实例如下:

pig -p startdate=2011-03-21 -p enddate=2011-03-28 script.pig

这样就可以实现多个参数传递的例子,但其中,如果参数值中存在空格,则会报错,
原文:https://blog.csdn.net/iteye_19679/article/details/82580903

8、两列相除:

# 两个整数相除,如何得到一个float
A = LOAD '16.txt' AS (col1:int, col2:int);
B = FOREACH A GENERATE (float)col1/col2;
DUMP B;
# 注意先转型在计算,而不是(float)(col1/col2);

9、filter正则匹配:

 https://www.cnblogs.com/lishouguang/p/4559300.html

)等值比较
filter data by $ ==
filter data by $ != )字符串 正则匹配 JAVA的正则表达式
字符串以CM开头
filter data by $ matches 'CM.*'; 字符串包含CM
filter data by $ matches '.*CM.*'; )not
filter data by not $==;
filter data by not $ matches '.*CM.*';   
)NULL处理
filter data by $ is not null;   
)UDF
filter data by isValidate($);   
)and or
filter data by $!= and $>

10、修改Pig作业执行的queue

作业提交到的队列:mapreduce.job.queuename

作业优先级:mapreduce.job.priority,优先级默认有5个:LOW VERY_LOW NORMAL(默认) HIGH VERY_HIGH
1、静态设置
1.1 Pig版本

SET mapreduce.job.queuename root.etl.distcp;

SET mapreduce.job.priority HIGH;
---------------------  
作者:wisgood  来源:CSDN  
原文:https://blog.csdn.net/wisgood/article/details/39075883

https://my.oschina.net/crxy/blog/420227?p=1

pig常用命令的更多相关文章

  1. Mysql 常用命令集

    1.mysqlbinlog工具使用方法如下: 先使用 show binary logs 查看 在使用导出命令 mysqlbinlog -R -uroot -pxxxx -hxxx.xxx.xxx.xx ...

  2. hadoop伪分布模式的配置和一些常用命令

    大数据的发展历史 3V:volume.velocity.variety(结构化和非结构化数据).value(价值密度低) 大数据带来的技术挑战 存储容量不断增加 获取有价值的信息的难度:搜索.广告.推 ...

  3. Linux 常用命令(持续补充)

    常用命令: command &:将进程放在后台执行 ctrl + z:暂停当前进程 并放入后台 jobs:查看当前后台任务 bg( %id):将任务转为后台执行 fg( %id):将任务调回前 ...

  4. LVM基本介绍与常用命令

    一.LVM介绍LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制LVM - 优点:LVM通常用于装备大量磁盘的系统,但它同样适 ...

  5. Linux学习笔记(一):常用命令

    经过统计Linux中能够识别的命令超过3000种,当然常用的命令就远远没有这么多了,按照我的习惯,我把已经学过的Linux常用命令做了以下几个方面的分割: 1.文件处理命令 2.文件搜索命令 3.帮助 ...

  6. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  7. 【原】npm 常用命令详解

    今年上半年在学习gulp的使用,对npm的掌握是必不可少的,经常到npm官网查询文档让我感到不爽,还不如整理了一些常用的命令到自己博客上,于是根据自己的理解简单翻译过来,终于有点输出,想学习npm这块 ...

  8. npm常用命令

    npm常用命令 环境:win7 npm 是什么 NPM(node package manager),通常称为node包管理器.顾名思义,它的主要功能就是管理node包,包括:安装.卸载.更新.查看.搜 ...

  9. Git 常用命令

    一.初始環境配置 git config --global user.name "John Doe"git config --global user.email johndoe@ex ...

随机推荐

  1. Spark SQL CLI 实现分析

    背景 本文主要介绍了Spark SQL里眼下的CLI实现,代码之后肯定会有不少变动,所以我关注的是比較核心的逻辑.主要是对照了Hive CLI的实现方式,比較Spark SQL在哪块地方做了改动,哪些 ...

  2. http://www.html5tricks.com/demo/jiaoben2255/index.html 排序算法jquery演示源代码

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...

  3. leetcode题解||Palindrome Number问题

    problem: Determine whether an integer is a palindrome. Do this without extra space. click to show sp ...

  4. 理解SetCapture、ReleaseCapture、GetCapture(控制了消息发往哪个窗口,即消息窗口)

    理解SetCapture.ReleaseCapture.GetCapture 正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口.如果调用了SetCapture,之后无论鼠标的位置在哪 ...

  5. return在Java中的两个作用

    Java中return的两个作用:   (1)返回方法指定类型的值(这个值总是确定的),也可以是对象   (2)方法的结束

  6. E20170626-hm

    authenticate   vt. 认证,证明是真实的.可靠的或有效的; 鉴定,使生效; author   n. 作者; 著作家; 创造者; 发起人;

  7. Mysql中date,time,datetime,timestamp的区别

    区别: timestamp:时间戳.北京时间1970年01月01日08时00分00秒 起至现在的总秒数. datetime:带时分秒的完整时间,例如:1970-01-01 10:00:00 date: ...

  8. jquery中对于为一组标签赋予点击事件

    可以用each,但是each不能对动态的元素进行事件的绑定, 不过,其实也很简单,只需要获取所有的标签集,然后用动态绑定的方法,比如live进行绑定就可以了. 有时候,其实不难,只是自己想的太过复杂. ...

  9. [Swift通天遁地]七、数据与安全-(5)高效操作SQLite数据库

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  10. 网络简要<入门篇>

    OSI七层 网络的含义:两个不在同一地理位置的主机(终端),通过传输介质和通信协议,实现通信和资源共享. 网络四要素:终端,传输介质 ,通信协议,资源 网络分类: 以范围分类:LAN网(局域网,以太网 ...