1

私はPIGが初めてで、複数行の入力(Webサイト)のワードカウント(Webサイト)の問題を解決しようとしています。たとえば、入力データセットには値があります

入力データ

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(ユーザー)があります

4

1 に答える 1

1

メールと Web サイトはタブで区切られ、Web サイト自体はスペースで区切られていると仮定します。以下は、目的の出力を取得するための段階的なコードです。主なアイデアは、最初に Web サイトをトークン化し、それらをフラット化し、(email、tokenize_website) でグループ化し、カウントを生成してから、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)}
......

PS: 私は PIG の初心者なので、私が持っているソリューションは最適ではないかもしれません。

于 2013-09-14T08:56:27.153 に答える