gpt4 book ai didi

hadoop - Apache pig : Select from multiple table on a common column without join

转载 作者:行者123 更新时间:2023-12-02 20:12:45 24 4
gpt4 key购买 nike

我是 pig 和hadoop的新手。我需要从公共(public)列上的多个表中选择和分组行(但它不是连接)。

例如,如果表 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

最佳答案

我认为您想要做的是加载两个表,然后执行 filter手术。

如果您有一个名为 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)

或者,如果您有两个没有从文件加载的关系,您可以使用 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 进行分组,那么您可以执行 group而不是最后一行的过滤器。
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)})

关于hadoop - Apache pig : Select from multiple table on a common column without join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11722268/

24 4 0