Pig优化之路之巧用Macro

问题:

去年用Pig进行了一系列报表和ETL的开发,感觉Pig很不错,没有Hive的娇贵,又比粗糙的MapReduce来的精巧,很称手。新年正好涉及以前的程序调整,借此之机,对Pig写的脚本进行了优化。毕竟,越用越熟,越能发现Pig的魅力。

在整理以前的Pig程序里,发现了一个问题,就是pig没有提取数据集大小的功能,所以每次要取数据集条数的工作,总会遗留下如下代码:

curr_cnt = GROUP curr_uids_dis all;
curr_all_ct = FOREACH curr_cnt GENERATE COUNT(curr_uids_dis.uid)  ;

其实上面代码的作用就是取出curr_uids_dis数据集的记录条数。但无奈以前对对pig知之甚少,只能遇河搭桥。河过多了,不同的桥也架多了,导致代码非常臃肿。

怎么办?

这就要深挖一下Pig的语法了,在Pig中,有一个非常有用的宏定义功能。先说简单的,直接关联一个UDF的,语法如下:

DEFINE DataTypeValidationUDF com.validation.DataTypeValidationUDF(); --相当于定义了一个macro DataTypeValidationUDF

以后使用的时候,就直接

DealData = DataTypeValidationUDF(claim_amount) ;

当然,如果要自定义一个复杂的处理宏,就可以这么来,语法如下:

DEFINE func1(LOGS) returns numerical_row{ --定义返回值
   --处理逻辑
  $numerical_row =  $LOGS ; --返回值赋值,注意,参数引用要加$
};

这样,办法就来了,我们可以把求数据集条数的语句做一个封装。以后只要调用这个macro就可以了。

/*
Define the macro, specify the input parameters and the return value
*/
DEFINE getDataSize(LOGS) returns numerical_row{
  $numerical_row =  FOREACH (GROUP $LOGS ALL) GENERATE COUNT_STAR($LOGS); --求出数据集的条数
};

但按照我们有追求的程序猿来说,还想干的更完美,我们想把所有的宏都封装到一个文件里,然后在相关程序里引用后再调用。

问题来了,如何做?我们又翻开Pig的语法,开始挖掘。

正好,Pig有这个功能,语法如下:

/*
Import macro defined in the file util.pig
*/
IMPORT '/xxx/xxx/util.pig';

好了,知道如何打造我们的工具库后,我们程序可以这么来写了。

REGISTER 'piggybank.jar';
IMPORT '/xx/util.pig';
LOGS = LOAD  '/in_off/tree_2013/*' USING   PigStorage('\t') as (uid) ;
ret =  getDataSize(LOGS) ;
dump ret;

然后,我们的util.pig清单如下

/*
util.pig place all util macro
*/
DEFINE getDataSize(LOGS) returns numerical_row{
  $numerical_row =  FOREACH (GROUP $LOGS ALL) GENERATE COUNT_STAR($LOGS); --求出数据集的条数
};

以后,我们可以在这里定义所有的工具宏了。

貌似都完成了,但完美的程序猿发现,好像还是有个东西挺别扭。

如果有多个pig文件要import,那同样路径得写好多个啊,浪费。

Pig语法又来了,可以设置Pig的文件包含路径。

set pig.import.search.path '/xxx/xxxx';

这样优化后的总体程序是:

REGISTER 'piggybank.jar';
set pig.import.search.path '/xxx/xxxx';
IMPORT 'util.pig';
LOGS = LOAD  '/in_off/tree_2013/*' USING   PigStorage('\t') as (uid) ;
ret =  getDataSize(LOGS) ;
dump ret;



时间: 2025-01-01 18:47:52

Pig优化之路之巧用Macro的相关文章

精细化容量管理的设备成本优化之路

版权声明:本文由梁定安原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/224 来源:腾云阁 https://www.qcloud.com/community 作者简介:梁定安,现就职于腾讯社交网络运营部,负责社交平台.增值业务的运维负责人,开放运维联盟专家委员,腾讯云布道师,腾讯课堂运维讲师. SNG社交网络运营部管理着近10万台的Linux服务器,以此支撑着腾讯社交业务海量业务与用户,如日活2.47亿的QQ.月活5.9

天弘基金移动App客户端架构优化之路

天弘基金移动App客户端架构优化之路 随着移动互联网时代的到来,移动技术也随之飞速发展.如今,APP已成为绝大多数互联网企业用来获取用户的核心渠道.与此同时,伴随着业务量的增长,愈来愈多的APP也在不断地挑战着每一个移动端研发人员的知识深度,而移动端技术人员也在这个不断接受挑战的过程中,成就了今天的移动互联网时代. 天弘基金作为一家在基金,金融行业高速发展的公司,APP面临着多重挑战,如庞大的用户群体.高频的基金业务.交易安全可靠性等等.天弘基金移动端的开发小伙伴在技术和业务的多重压力下,不断推

Golang 优化之路——bitset

写在前面 开发过程中会经常处理集合这种数据结构,简单点的处理方法都是使用内置的map实现.但是如果要应对大量数据,例如,存放大量电话号码,使用map占用内存大的问题就会凸显出来.内存占用高又会带来一些列的问题,这里就不展开说了.还有就是,大量数据存放于map,查找的哈希算法消耗也会很高.这时就该考虑对数据结构进行优化.之前浏览awesome-go时发现了一种叫bitset的数据结构,今天就介绍一下它. bitset 简介 首先这是一个数据结构.从名字set不难发现,这是一个集合的数据结构.bit

魔窗研发副总裁沈哲:移动端SDK的优化之路

作者简介: 沈哲,擅长移动端.互联网后端技术,曾经在安硕信息.decarta(已被uber收购).京东商城等国内外知名软件公司.互联网公司工作.开发过decarta第一款地图导航app,今夜酒店特价app,负责过京东到家上海的移动端团队.现负责魔窗移动端团队,负责研发魔窗的sdk以及移动端相关产品. 本人自2015年9月底加入魔窗,开始着手优化魔窗移动端sdk的工作. 魔窗是基于Deep Link技术的开放平台,通过提供生态落地最后一公里的deep link.跨App store渠道的归因分析以

Unity3d优化之路

Unity3d优化之路.U3D的架构部分已经讲了很多了,这里我想讲讲对于U3D优化的亲身体验. 优化之路分三块: 一.渲染级别. GUI部分:我使用的是NGUI,它对动态移动.旋转.缩放GUI支持的是比较差的,所以我尽量不要把过多的移动旋转缩放的部分写在GUI中,但很多情况下是避免不了的,比如:大量的伤害数字,物品掉落,图标的移动和旋转等,为了不让GUI去控制这些渲染物体,一小部分我使用3D面片代替,而大部分使用程序去生成面片渲染脱离了GUI的控制.另外在那些静态的GUI中,我使用了静态物体优化

阿里巴巴 web前端性能优化进阶路

Web前端性能优化WPO,相信大多数前端同学都不会陌生,在各自所负责的站点页面中,也都会或多或少的有过一定的技术实践.可以说,这个领域并不缺乏成熟技术理论和技术牛人:例如Yahoo的web站点性能优化黄金法则,以及大名鼎鼎的优化大师Steve Souders.本文并非一篇讨论性能优化技术方法的文章,而更多的是对中文站搜索List页面持续两年多的前端性能优化实践的思路总结.希望对正在从事这个领域研究的前端同学能有所帮助. 简单的说,我们的性能优化实践分为三个阶段:初探期.立规期.创新期, 每个阶段

我的Android Studio 优化之路

改动keymap 改动经常使用的快捷键 代码补全(Eclipse: ALT+/) Android Studio中默认用的是Ctrl+Space, 这跟输入法切换冲突.找到Keymap->Main Menu->Code->Completion->Basic.改为ALT+/ 高速错误修正(Eclipse: Ctrl+1) 找到 Keymap->Other->Show Intention Action.改为Ctrl+1 其它实用的快捷键 高速查找代码应用(Ctrl+G) 凝视

新浪微博iOS客户端架构与优化之路

随着Facebook.Twitter.微博的崛起,向UGC.PGC.OGC,自媒体提供平台的内 容消费型App逐渐形成了独特的客户端架构模式.与电商和通讯工具类App不同,微博客户端具有多信息流.内容丰富多样.对数据量和延迟敏感等特点.微博的信息流承载着文字.网页.照片.视频.直播等多样的内容形式,所以复杂信息流对团队的开发效率.App的性能都带来了极大的挑战. 2016年6月24-25日,GMTC全球移动技术大会将在北京举行.本届大会,我们邀请到了新浪微博移动端资深研发专家邱晨老师.曾就职于F

CSS代码重构与优化之路

写CSS的同学们往往会体会到,随着项目规模的增加,项目中的CSS代码也会越来越多,如果没有及时对CSS代码进行维护,CSS代码不断会越来越多.CSS代码交错复杂,像一张庞大的蜘蛛网分布在网站的各个位置,你不知道修改这行代码会有什么影响,所以如果有修改或增加新功能时,开发人员往往不敢去删除旧的冗余的代码,而保险地增加新代码,最终的坏处就是项目中的CSS会越来越多,最终陷入无底洞. CSS代码重构的目的 我们写CSS代码时,不仅仅只是完成页面设计的效果,还应该让CSS代码易于管理,维护.我们对CSS