一、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. LeetCode 237. Delete Node in a Linked List (在链表中删除一个点)

    Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...

  2. 【ubuntu firefox】 Firefox is already running, but is not responding

    在ubuntu下启动firefox报错 Firefox is already running, but is not responding. To open a new window, you mus ...

  3. unable to execute dex: multiple dex files Cocos2dxAccelerometer

    原文转载:http://discuss.cocos2d-x.org/t/conversion-to-dalvik-format-failed-unable-to-execute-dex-multipl ...

  4. C++中的继承与虚函数各种概念

    虚继承与一般继承 虚继承和一般的继承不同,一般的继承,在目前大多数的C++编译器实现的对象模型中,派生类对象会直接包含基类对象的字段.而虚继承的情况,派生类对象不会直接包含基类对象的字段,而是通过一个 ...

  5. B2761 [JLOI2011]不重复数字 离散化

    就是一道离散化的裸题,但是在写的时候遇到了一些不可描述的问题,但是还是很顺利的. 题干: Description 给出N个数,要求把其中重复的去掉,只保留第一次出现的数. 例如,给出的数为1 ,其中2 ...

  6. min-max容斥小结

    https://www.zybuluo.com/ysner/note/1248287 定义 对于一个集合\(S\), \(\min(S)\)表示其第一个出现的元素(\(or\)最小的元素), \(\m ...

  7. 51Nod 1301 集合异或和 —— 异或DP

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1301 参考博客:https://blog.csdn.net/qq_ ...

  8. 【转载】深入理解Linux文件系统

      1.rm-rf删除目录里的文件后,为什么可以恢复? 首先创建一个空目录test,目录的blocksize为4096字节 为了空目录还是4096?首先,目录的大小取决它所包含的文件的inode(访问 ...

  9. 自定义Git(转载)

    转自:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137621280731 ...

  10. HDU 3785 找寻大富翁

    2019-06-06 08:30:03 坚持!!! 做这些水题,都觉得心累,特别是HDU的题,我PE了3发