首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用Pig处理多行数据集时,对相似值执行计数

在使用Pig处理多行数据集时,对相似值执行计数
EN

Stack Overflow用户
提问于 2013-09-13 19:53:11
回答 1查看 178关注 0票数 1

我是一个新的猪,并试图解决一个问题的字计数(网站)的多行输入(网站)。例如,我的输入数据集具有以下值

输入数据

代码语言:javascript
复制
Email     websites
e1        web1 web2 web3 web1 ....
e2        web2 web3 web2 web2 web4 ...
e3        web1 web2 web1 web4 .....

我想要的输出将是

代码语言:javascript
复制
Email     websites
e1        web1(2) web2(1) web3(1) ....
e2        web2(3) web3(1) web4(1) ...
e3        web1(2) web2(1) web4(1) .....

在我的数据集中,我有将近50000的电子邮件id(用户)

EN

回答 1

Stack Overflow用户

发布于 2013-09-14 08:56:27

假设电子邮件和网站是分开的,而网站本身是分开的。下面是一步一步的代码来获得期望的输出,其主要思想是首先对网站进行标记化,将其扁平化,逐个分组(电子邮件,tokenize_website),生成计数,然后通过电子邮件进行分组。

代码语言:javascript
复制
A = LOAD 'sample.txt' AS (email:chararray, urls:chararray);
B = FOREACH A GENERATE email AS email, FLATTEN(TOKENIZE(urls)) AS tokenize_urls;

倾销B

代码语言:javascript
复制
e1  web1
e1  web2
e1  web3
e1  web1
e2  web2
e2  web3
......

现在按以下方式分组(电子邮件、令牌化urls)和生成计数

代码语言:javascript
复制
C = GROUP B BY (email, tokenize_urls); 
D = FOREACH C GENERATE group.email as email, group.tokenize_urls as url, 
                COUNT(B) as url_count;

倾销D

代码语言:javascript
复制
e1  web1    2
e1  web2    1
e1  web3    1
e2  web2    3
....

现在通过电子邮件分组

代码语言:javascript
复制
   E = GROUP D BY email;

倾销E

代码语言:javascript
复制
e1  {(e1,web1,2),(e1,web2,1),(e1,web3,1)}
e2  {(e2,web2,3),(e2,web3,1)}
e3  {(e3,web1,2),(e3,web2,1),(e3,web4,1)}
......

PS:我自己就是猪的新手,所以我的解决方案可能不是最佳的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18794187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档