文档章节

Pig 读书笔记 + 工作总结(干货很多)

王二铁
 王二铁
发布于 2014/05/19 12:51
字数 954
阅读 2329
收藏 10

编码规范:
1. 注释:     单行:--
     多行或嵌入式: /* */
2. 大小写:
     关键字不区分大小写,变量名和udf区分大小写

数据类型:
int, long, float, double, chararray, Bytearray, tuple, bag, map

语法:
     读取 & 保存 & 参数:
      1. LOAD reads data from the file system
          eg. LOG = LOAD '/user/pig/test'  AS (name:chararray, age:int);
       * 使用 USING PigStorage(',') 指定分隔符是逗号,默认是tab可以不指定eg中。
       * 使用 USING HBaseStorage() 从HBase导入数据
       * 使用 USING org.apache.pig.piggybank.storage.HiveColumnarLoader('name string, age int') 从hive中导入rcfile文件注意数据类型要用Hive中的,不是pig中的,尤其是chararray和string不用用混,另外需要引入几个jar包:
          * register /hadoop/pig/lib/piggybank.jar
          * register /hadoop/pig/lib/hive-exec-0.8.1.jar
          * register /hadoop/pig/lib/hive-common-0.8.1.jar

     2.STORE  writes output to the file system
          eg. STOER LOG into '/user/pig/output';
       * 使用 USING PigStorage(',') 指定输出数据的分隔符是逗号,默认是tab可以不指定eg中。
       * 使用 USING HBaseStorage() 存储到HBase中

     3.DUMP  displays output to the screen
          eg. dump LOG
       * dump压缩过的文件,而产生乱码时,设置下:SET mapred.output.compress false

     4. 传参:

        eg. pig -p date='2014-05-17' pug_test.pig  #pig脚本中用$date调用
     
     过滤:
     1.FILTER : 按条件删除行
          eg. FILTER LOG by gender='female'
     2.DISTINCT : 去处重复的行
          eg. DISTINCT (FILTER LOG by gender='male')
     3.FOREACH…GNERATE  : 增加或删除字段
          eg. FOREACH LOG GENERATE name, age, ((boyfrieds is null)?60:0)
     
     分组和连接和抹平:
     1.JOIN:2个或多个表连接
          eg. JOIN A BY aid (LEFT/RIGHT OUTER), B BY bid

       * 默认JOIN是内连接
       * 如果某一个表不大可以使用Using 'replicated',将后面的表放到内存中,但是一定要小心不能超过JVM设定的最大内存,不然会有内存溢出的问题
       * JOIN … LEFY/RIGHT OUTER …. 标准的左连接和右连接
       * 可以指定多个字段的JOIN,JOIN A by (aid, a_name), B by (bid, b_name),也可以考虑用concat(aid, a_name)这种拼接值JOIN来提高效率

     2.GROUP:一个关系中分组  

log = load '/tmp/jiankuiwang/tmp/cogroupa.txt' as (name:chararray, age:int, act:chararray);          
g_log = group log by act;                                                                 
describe g_log;
--g_log: {group: chararray,log: {(name: chararray,age: int,act: chararray)}} 
dump g_log;
--(eat,{(liza,22,eat)})  
--(run,{(jack,32,run)}) 
--(mouse,{(tom,20,mouse)})

     3.COGROUP:2+个关系中做分组
          eg. C= COGROUP A BY aid, B by bid
        * 小心aid和bid的空值   
        * 使用OUTER 、 INNER 实现外连接和内连接

     4.FLATTEN:消除嵌套,将map或者元组抹平。
         

gf = foreach g_log generate flatten($1);
describe gf;                                          
--gf: {log::name: chararray,log::age: int,log::act: chararray}
dump gf;    
--(liza,22,eat)              
--(jack,32,run)
--(tom,20,mouse)

                          
     5.CROSS:2+个关系的叉乘
     
     排序:
     1.ORDER
     2.LIMIT
     
     合并和分割;
     1.UNION
     2.SPLIT
     
     调试&诊断:
     1.DESCRIBE:描述关系和数据结构
     2.EXPLAIN:打印New Logical Plan,Physical Plan,Map Reduce Plan    
     3.ILLUSTRATE:显示Logical Plan的试运行结果
     4.PARALLEL : 设置reduce个数

     UDF和STREAM:
     1.REGISTER:注册Jar文件
          eg. register /hadoop/pig/lib/piggybank.jar
     2.DEFINE:为UDF,流式脚本或者命令规范新建别名,例子和STREAM一起介绍
     3.STREAM    

DEFINE app_user_reborn `app_user_reborn.py '$STREAM_FIELDS'` SHIP('$BIN/../udf/app_user_reborn.py','$BIN/../../../jaguar_common/streaming_base.py','$BIN/../../../jaguar_common/string_util.py',
 '$BIN/../udf/IP.csv') OUTPUT (stdout USING PigStreaming('\u0001'));
              APP_ROWS = STREAM LOG THROUGH app_user_reborn AS (device_id, device_token, access_token, imei, macid, device, device_info, user_ids, app, versions, client_ids, network_info, visit_ip, visit_location, start_times, online_time, search_word, total_pv, page_pv, order_list, gmv, province, city, land_page, bounce_page) ;

   * $STREAM_FIELDS 是app_user_reborn.py 的输入参数
   * SHIP的作用的装载app_user_reborn.py 脚本中用到的其他文件,注意:Only files, not directories, can be specified with the ship option。
   * OUTPUT指定app_user_reborn.py 的输出文件的分隔符


   * 非常重要的一点: PIG 调用python脚本1,python脚本1调用python脚本2, 怎么实现? 做法:1,ship时传入2个脚本;2.在脚本1中加入一行sys.path.append(os.getcwd())

© 著作权归作者所有

王二铁

王二铁

粉丝 89
博文 62
码字总数 41123
作品 0
北京
后端工程师
私信 提问
学习编程,也请多做笔记多思考

一直以来我坚信坚持阅读是一件非常有意义的事情,但是渐渐地我发现很多人阅读,往往都是走马观花,绝大多数人虽然看了很多书或者视频最后却什么都不会,我们浪费了大量的时间在看,却不是在思...

路人甲
2017/11/16
0
0
如何用思维导图学Java编程思想

摘要:如何学习Java编程思想,基本分为21个部分,看完本文你就有答案。 width="auto" src="http://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbizjpg/Uic0S1r5o6Ou7kZN43vics5mNtYhTO4vhkOldOGnA......

bjweimengshu
2017/12/23
0
0
读书也需要「耍心眼」?这 10 个读书策略,你怎么看?

本文来自作者 丹华 在 GitChat 上分享 「我的10个读书策略」 编辑 | Mc Jin 为什么阅读也需要策略? 不是爱读啥读啥吗? 读书也需要“耍心眼”吗? 当然需要。 小说文学类休闲娱乐性质的阅读...

gitchat
2018/04/18
0
0
《智识的生产技术》读书笔记

商务印书社,作者 梅绰忠夫 2018/1/14 阅读完毕 2 小时 一本挺有意思的小书,最初在开智公众号上见着,便央国内朋友带了一本过来。 很讽刺的是,原书是日文版,但是因为嫌贵(原版50元左右,...

坂本龙一
2018/01/16
0
0
张亮《从零开始做运营》读书笔记整理上篇

前段时间我有幸拜读了张亮老师的《从零开始做运营》,阅读完全书到现在也有些时间了,想做一些总结巩固学到的知识,也希望能给想做运营的人一些帮助,同时我也想借此机会抛砖引玉希望有前辈能...

林八月啊
2018/08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

手写RPC框架指北另送贴心注释代码一套

Angular8正式发布了,Java13再过几个月也要发布了,技术迭代这么快,框架的复杂度越来越大,但是原理是基本不变的。所以沉下心看清代码本质很重要,这次给大家带来的是手写RPC框架。 完整代码...

全菜工程师小辉
8分钟前
2
0
【Java】开发收货

简介 谨以此篇,记载开发过程中的一些tips。 编译器 【Shift + F6】可实现变量的联动修改。

Areya
25分钟前
5
0
DOM官方定义

DOM Document Object Model 文档对象模型 DOM的官方定义:W3C的DOM,可以使程序或者脚本(JS或AS\JScript),动态的访问或者操作文档的内容、结构、样式。 DOM只是一个标准,操作网页的标准。...

前端老手
30分钟前
6
0
IT兄弟连 HTML5教程 HTML5的学习线路图 第一阶段学习网页制作

学习HTML5技术可并不是简单学会几个新增的标签而已,HTML5现在可以说是前端所有技术的代名词。需要学习的语言和工具不仅多,对于刚接触他们的新人会感觉很乱。另外,前端开发也会细分很多个开...

老码农的一亩三分地
32分钟前
6
0
可见性有序性,Happens-before来搞定

写在前面 上一篇文章并发 Bug 之源有三,请睁大眼睛看清它们 谈到了可见性/原子性/有序性三个问题,这些问题通常违背我们的直觉和思考模式,也就导致了很多并发 Bug 为了解决 CPU,内存,IO ...

tan日拱一兵
47分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部