メールと 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 の初心者なので、私が持っているソリューションは最適ではないかもしれません。