在对多行数据集使用pig时对类似值执行计数

nhhxz33t  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(340)

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

Email     websites
e1        web1 web2 web3 web1 ....
e2        web2 web3 web2 web2 web4 ...
e3        web1 web2 web1 web4 .....

我想要的结果是

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(用户)

dfuffjeb

dfuffjeb1#

假设电子邮件和网站是分开的标签和网站本身是分开的空间。下面是获得所需输出的分步代码,主要思想是先对网站进行标记化,将其展平,然后进行分组(email,tokenize\u website),生成count,然后通过email进行分组。

A = LOAD 'sample.txt' AS (email:chararray, urls:chararray);
B = FOREACH A GENERATE email AS email, FLATTEN(TOKENIZE(urls)) AS tokenize_urls;

倾倒b

e1  web1
e1  web2
e1  web3
e1  web1
e2  web2
e2  web3
......

现在按(电子邮件、标记化URL)分组并生成计数

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

e1  web1    2
e1  web2    1
e1  web3    1
e2  web2    3
....

现在通过电子邮件分组

E = GROUP D BY email;

倾倒e

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)}
......

附言:我是Pig的新手,所以我的解决方案可能不是最优的。

相关问题