分享

Pig的COUNT问题

Joker 发表于 2014-10-21 10:50:14 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 8 9957
  1. grunt> A = LOAD 'c.txt' AS (col1:chararray, col2:int, col3:int, col4:int, col5:double, col6:double, col7:int);
  2. grunt> B = GROUP A BY (col2, col3, col4);
  3. grunt> C = FOREACH B {D = DISTINCT A.col7; GENERATE group, COUNT(D);};
  4. grunt> DUMP C;
复制代码

已有(8)人评论

跳转到指定楼层
Joker 发表于 2014-10-21 10:51:25
我主要就是过滤相指定相同字段,然后统计,但是输出都是1,我最终要统计所以的字段到底有多少天
请问是要什么方法?
回复

使用道具 举报

Joker 发表于 2014-10-21 11:05:34
这里我是要的方法是 D = GROUP C ALL;
                            E = FOREACH D GENERATE COUNT(C)
回复

使用道具 举报

howtodown 发表于 2014-10-21 11:23:31
本帖最后由 howtodown 于 2014-10-21 11:25 编辑
提供一些表中数据,和你要达到的效果
回复

使用道具 举报

Joker 发表于 2014-10-21 11:54:10
本帖最后由 Joker 于 2014-10-21 21:08 编辑

testFile
1 2
3 4
1 2
3 4
5 6

test.pig
  1. grunt>
  2. A = LOAD 'testFile.txt' AS (x:int,y:int);
  3. B = GROUP A BY y;
  4. C = FOREACH B {D = DISTINCT A.y; GENERATE  COUNT(D) as k;};
  5. D = GROUP C ALL;
  6. E = FOREACH D GENERATE COUNT(C.k);
  7. DUMP E;
复制代码


如果y值为相同的就是1个,最终统计出3个值
回复

使用道具 举报

howtodown 发表于 2014-10-21 14:30:25
本帖最后由 howtodown 于 2014-10-21 14:31 编辑
使用下面代码试试:是对col2去重,然后输出

  1. A = LOAD '1.txt' AS (col1: chararray, col2: chararray);
  2. B = GROUP A BY (col2);
  3. C = FOREACH B {
  4.         D = LIMIT A 1;
  5.        GENERATE FLATTEN(D);
  6. };
  7. DUMP C;
复制代码



回复

使用道具 举报

sstutu 发表于 2014-10-21 15:07:08
本帖最后由 sstutu 于 2014-10-21 15:12 编辑

grunt> A = LOAD 'c.txt' AS (col1:chararray, col2:int, col3:int, col4:int, col5:double, col6:double, col7:int);
grunt> B = GROUP A BY (col2, col3, col4);
grunt> C = FOREACH B {D = DISTINCT A.col7; GENERATE group, COUNT(D);};

grunt> DUMP C;



把上面内容,添加如下内容

B = GROUP A BY (col2, col3, col4,col7);
C = FOREACH B GENERATE (D = DISTINCT col7; group, COUNT(D));


修改为下面形式

grunt> A = LOAD 'c.txt' AS (col1:chararray, col2:int, col3:int, col4:int, col5:double, col6:double, col7:int);
grunt> B = GROUP A BY (col2, col3, col4,col7);
C = FOREACH B GENERATE (D = DISTINCT col7; group, COUNT(D));
grunt> DUMP C;

回复

使用道具 举报

Joker 发表于 2014-10-21 21:07:55
howtodown 发表于 2014-10-21 14:30
本帖最后由 howtodown 于 2014-10-21 14:31 编辑
使用下面代码试试:是对col2去重,然后输出

恩,之前用过这段代码,但是输出的全是1原因是,和早上想问的一样,我需要做最后的统计就是
不过多谢版主
回复

使用道具 举报

Joker 发表于 2014-10-21 21:10:21
sstutu 发表于 2014-10-21 15:07
把上面内容,添加如下内容

B = GROUP A BY (col2, col3, col4,col7);
...

多谢,学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条