猪怎么办条件加入?

时间:2012-06-27 07:08:11

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

我有两个关系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?

2 个答案:

答案 0 :(得分:0)

然而,您需要在嵌套FILTER内执行FOREACH操作;好像有一个bug,所以这样的句子甚至都不会解析。 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的情况下进行过滤。我选择了第二种选择,但并不总是这样做。

答案 1 :(得分:0)

没有Theta-joins in Pig I'害怕。您可以执行交叉连接,然后使用过滤器。警惕所导致的数据爆炸。