当前访客身份:游客 [ 登录  | 注册加入尚学堂]
直播

easychart

拥有积分:4
这家伙太懒,还没有签名!

博客分类

笔记中心

课题中心

提问中心

答题中心

解答题中心

pig中distinct用法

easychart 发表于 2年前 (2014-10-31 20:06:07)  |  评论(0)  |  阅读次数(1576)| 0 人收藏此文章,   我要收藏   

Distinct  

只能处理关系中的整个记录,不能是表达式,或者部分域。

--distinct.pig

daily  = load 'NYSE_daily' as (exchange:chararray, symbol:chararray);

uniq   = distinct daily;

uniq是一个关系relation(类似表,是流对象)。不是表达式

 

“distinct forces a reduce phase. It does make use of the combiner toremove,any duplicate records it can delete in the map phase.”其会强制执行一个reduce阶段(很多语句只用map就能完成,不需要reduce),此外还有order,join,group,limit,cogroup,cross等等。

而之所以distinct很快,是因为其在map阶段执行了combiner,提高效率。

其parallel只能控制reduce端,所以在设计程序时指定parallel的个数,实际上是指定了reduce的个数,而在reduce过程中,是自动hashing到对应的reduce中。

 

 

--distinct_symbols.pig

daily   = load 'NYSE_daily' as (exchange, symbol); -- not interested in otherfields

grpd    = group daily by exchange;

uniqcnt = foreach grpd {

          sym      = daily.symbol;

          uniq_sym = distinct sym;

          generate group, COUNT(uniq_sym);

};

另外,distinct只能处理relation,不能处理expression。

这里,daily.symbol是expression,不能被distinct。必须提取到sym后成为关系,才能被distinct。


分享到:0
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂 咨询电话:400-009-1906 010-56233821
Copyright 2007-2015 北京尚学堂科技有限公司 京ICP备13018289号-1 京公网安备11010802015183