【问题标题】:How to do condition JOIN in Pig?如何在 Pig 中进行条件 JOIN?
【发布时间】:2012-06-27 07:08:11
【问题描述】:

我有两个关系 A,B

DESCIBE A
A:{ip_num:long,data:int}

DESCIBE B
B:{ip_start_num:long,ip_end_num:long}

我想要产品:

C:{group:(ip_start_num:long, ip_end_num:long), B:{(ip_num:long, data:int)}}

where ip_num >ip_start_num && ip_num < ip_end_num

是否有可能与 PigLatin 相关?

【问题讨论】:

    标签: hadoop user-defined-functions apache-pig


    【解决方案1】:

    但是,您需要在嵌套的 FOREACH 内执行 FILTER 操作;似乎有一个错误,所以这样的句子甚至不会解析。 https://issues.apache.org/jira/browse/PIG-1798。这篇文章也提到了同样的问题。 USING Filter in a Nested FOREACH in PIG

    我昨天遇到了同样的问题,有两种解决方案:第一个是编写一个 UDF 来按 ip 范围进行过滤。第二个是找到在两个关系之间进行简单连接的方法,以便您可以拥有另一个关系:

    D:{ip_num:long,data:int,ip_start_num:long,ip_end_num:long}.

    您可以在没有嵌套 foreach 的情况下进行过滤。我选择了第二个选择,但这并不总是一种加入方式。

    【讨论】:

      【解决方案2】:

      恐怕在 Pig 中没有 theta-joins。您可以进行交叉连接,然后进行过滤。警惕由此产生的数据爆炸。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-03
        • 2011-12-24
        相关资源
        最近更新 更多