一、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. Qt Quick综合实例之文件查看器

    假设你基于Qt SDK 5.3.1来创建一个Qt Quick App项目,项目模板为你准备的main.qml文档的根元素是ApplicationWindow或Window.这次我们就以Applicat ...

  2. oc80--copy

    // // main.m // Copy基本使用,拷贝的本质:修改其中一个不能影响另外一个. // 每个oc对象都有copy和mutableCopy方法,前提是必须遵守NSCopying协议实现cop ...

  3. B1299 [LLH邀请赛]巧克力棒 博弈论

    这个题一看就是nim游戏的变形.每次先手取出巧克力就是新建一个nim,但假如先手取一个为0的而且无论后手怎么取剩下的都无法为零就行了.然后用dfs跑. 题干: Description TBL和X用巧克 ...

  4. bzoj1690

    二分+分数规划+dfs判环 跟1486很像,但是我忘记怎么判环了, 我们可以写一个dfs,如果当前节点的距离小于更新的距离,而且这个点已经在当前访问过了,那么就是有环了,如果没有访问过就继续dfs,每 ...

  5. shell脚本-数组

    shell脚本-数组 数组 变量:存储单个元素的内存空间. 数组:存储多个元素的连续的内存空间,相当于多个变量的集合. 数组索引:编号从0开始,属于数值索引.索引可支持使用自定义的格式,而不仅是数值格 ...

  6. Sublime Text 汉化插件

    https://blog.csdn.net/heyangyi_19940703/article/details/51869502 一.Sublime Text工具介绍: Sublime Text 是一 ...

  7. 等价表达式 2005年NOIP全国联赛提高组(栈模拟)

    P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...

  8. go 学习成长之路

    一.go的搭建 二.初识go 三.混个脸熟--go 四.go的语言结构 五.go的常量与变量 六.go基础数据类型 七.go 条件语句 八.go 运算符 九.go条件语句switch 十.go循环语句 ...

  9. android 二维码 扫描,生成,竖屏

    最近公司有用到二维码,生成,扫描,所以学习了一下,和大家分享: demo 见下面链接,已经改成竖屏: http://download.csdn.net/detail/q610098308/868101 ...

  10. Android内存管理(7)在AS中查看内存和cpu情况

    Memory and CPU monitor Android Studio provides a memory and CPU monitor view so you can more easily ...