【问题标题】:How to self-join two bags?如何自行加入两个包?
【发布时间】:2015-07-16 19:49:47
【问题描述】:

我有一组数字来描述第一组整数和第二组整数之间的联系。例如:

1,2
3,4
5,6
5,7
6,8

然后我按如下方式加载我的数据,并将其分组:

data = load 'data.csv' as integer_1, integer_2;
grouped = group data by integer_1;

grouped_numbers = foreach grouped generate group as node, data.integer_2 as connection;

然后产生一个包,其中包含每个第一个整数及其一级连接:

(1,{(2)})
(3,{(4)})
(5,{(6),(7)})
(6,{(8)})

然后,我想对 grouped_numbers 包进行自连接,以便将结果的第一个整数与其一阶和二阶连接中的每一个连接起来。在这种情况下,那就是:

(1,{(2)})
(3,{(4)})
(5,{(6),(7),(8)})
(6,{(8)})

因为 5 连接到 6,而 6 连接到 8,所以 8 是 6 的二度连接。我该如何在 Pig 中实现呢?

【问题讨论】:

    标签: mapreduce apache-pig


    【解决方案1】:

    第一次加入:

        joined = join data1 by int_2, data2 by int_1
    

    其中 data1 和 data2 是同一个集合(在此示例中为 data 的副本)。

    然后按第一个字段分组。内袋将具有与“组”的所有连接,可能不止一次。因此,如果您只是其中一个独特的元素,您可能还需要在内袋上与众不同。

    (通过 Pig 邮件列表回答)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 2015-07-23
      • 1970-01-01
      相关资源
      最近更新 更多