Hadoop ApachePig:从公共列上的多个表中选择,而不使用联接

Hadoop ApachePig:从公共列上的多个表中选择,而不使用联接,hadoop,apache-pig,Hadoop,Apache Pig,我不熟悉pig和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,ca

我不熟悉pig和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

我认为您要做的是加载两个表,然后执行一个操作

如果您有一个名为
table1
的文件,其中包含内容

adv1,app1,adg1,camp1
adv2,app3,adg2,camp2
adv1,app2,adg2,camp1
adv3,app1,adg3,camp3
adv1,app1,adg4,camp2
以及包含内容的文件
表2

adv1,app1,adg1,camp1
adv2,app3,adg2,camp2
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)
或者,如果有两个关系不是从文件加载的,则可以使用组合它们,然后进行筛选

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