1

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

4

2 回答 2

0

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

于 2015-04-15T15:53:52.307 回答
0

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

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

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

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

于 2012-06-28T13:32:47.020 回答