我需要你的帮助。我只得到一张唱片。我选择了两列并对另一列进行计数(distinct),同时还使用where like子句查找特定描述(desc)。
下面是我的sql和pig代码。
/*
For example in sql:
select domain, count(distinct(segment)) as segment_cnt
from table
where desc='ABC123'
group by domain
order by segment_count desc;
*/
A = LOAD 'myoutputfile' USING PigStorage('\u0005')
AS (
domain:chararray,
segment:chararray,
desc:chararray
);
B = filter A by (desc=='ABC123');
C = foreach B generate domain, segment;
D = DISTINCT C;
E = group D all;
F = foreach E generate group, COUNT(D) as segment_cnt;
G = order F by segment_cnt DESC;
3条答案
按热度按时间oo7oh9g91#
您可以更好地将其定义为宏:
用法:
X = LOAD 'data' AS (x: int);
Y = DISTINCT_COUNT(X, x);
如果你需要用在FOREACH
相反,最简单的方法是:...GENERATE COUNT(Distinct(x))...
在12号Pig身上测试。xzv2uavs2#
如果您不想依赖任何组,请使用以下命令:
这只会给你一个数字。
ndasle7k3#
您可以在每个域上分组,然后使用嵌套的foreach语法计算每个组中不同元素的数量: