0

私は豚とhadoopが初めてです。共通の列で複数のテーブルから行を選択してグループ化する必要があります (ただし、結合ではありません)。

たとえば、テーブル 1 が次の場合:

adv1,app1,adg1,camp1  
adv2,app3,adg2,camp2  

表 2 は次のとおりです。

adv1,app2,adg2,camp1  
adv3,app1,adg3,camp3  
adv1,app1,adg4,camp2  

次に、次のようなものが必要です。

adv1,app1,adg1,camp1  
adv1,app2,adg2,camp1  
adv1,app1,adg4,camp2
4

1 に答える 1

1

あなたがしたいことは、両方のテーブルをロードしてからフィルター操作を実行することだと思います。

table1内容を含むというファイルがある場合

adv1,app1,adg1,camp1
adv2,app3,adg2,camp2

table2およびコンテンツを含むファイル

adv1,app2,adg2,camp1
adv3,app1,adg3,camp3
adv1,app1,adg4,camp2

次に、次のことができます。

T = load '{/path/to/table1,/path/to/table2}' using PigStorage(',')
        as (adv:chararray, app:chararray, adg:chararray, camp:chararray);
result = filter T by adv == 'adv1';

> dump result
(adv1,app2,adg2,camp1)
(adv1,app1,adg4,camp2)
(adv1,app1,adg1,camp1)

または、ファイルからロードしていない 2 つのリレーションがある場合は、unionを使用してそれらを結合し、フィルタリングすることができます。

> dump T1
(adv1,app1,adg1,camp1)
(adv2,app3,adg2,camp2)
> dump T2
(adv1,app2,adg2,camp1)
(adv3,app1,adg3,camp3)
(adv1,app1,adg4,camp2)

T = union T1, T2;
result = filter T by adv == 'adv1';

さらに、adv1 だけでなく、考えられるすべてのキーに基づいてグループ化しようとしている場合は、最後の行のフィルターの代わりにグループ化を行うことができます。

result = group T by adv;

> dump result
(adv1,{(adv1,app1,adg1,camp1),(adv1,app2,adg2,camp1),(adv1,app1,adg4,camp2)})
(adv2,{(adv2,app3,adg2,camp2)})
(adv3,{(adv3,app1,adg3,camp3)})
于 2012-07-30T17:34:48.900 に答える