如何在 PIG 中运行独占 SPLIT?

发布于 2024-12-05 12:18:46 字数 803 浏览 0 评论 0原文

我想知道:由于 PIG 中 SPLIT 关系运算符的默认行为是非排他性地分割关系(即,如果一行符合 2 个或更多关系的条件,它将被放入所有关系中),有没有办法改为专门拆分?我的意思是,我想运行一个 SPLIT 语句,它将一行放入符合其条件的第一个关系中,然后将其放入不存在其他关系中,即使它适合稍后指定的条件关系。

正常分裂下的示例:

A=

<1, 2, 3>
<4, 2, 1>
<8, 3, 4>
<4, 3, 3>
<7, 2, 5>
<8, 4, 3> 

然后

SPLIT A INTO X IF $0 < 7, Y IF ($0 > 2 AND $0<> 7);

给出:

X=

<1, 2, 3>
<4, 2, 1>
<4, 3, 3>

并且

Y=

<4, 2, 1>
<8, 3, 4>
<4, 3, 3>
<8, 4, 3>

在这种情况下<4,2,1> <4,3,3>进入两种关系。我希望每个人都只进入其条件符合的第一个关系(A)。

注意:我知道我可以分两步完成此操作,首先将第一个条件与其补数分开,然后将第二个条件仅与补数分开,但我希望有一个一步解决方案(或者至少可以扩展的解决方案)如果存在的话,最好进行多次分割。

I'm wondering: since the default behavior of the SPLIT relational operator in PIG is to split relations non-exclusively (i.e. if a row fits conditions for 2 or more relations, it will be put into all of them), is there a way to split exclusively instead? What I mean, is I'd like to run a SPLIT statement that would put a row into the first relation whose condition(s) it fits, and then puts it in no other relation, even if it fits a later specified conditions relations.

An example under a normal split:

A=

<1, 2, 3>
<4, 2, 1>
<8, 3, 4>
<4, 3, 3>
<7, 2, 5>
<8, 4, 3> 

then

SPLIT A INTO X IF $0 < 7, Y IF ($0 > 2 AND $0<> 7);

Gives:

X =

<1, 2, 3>
<4, 2, 1>
<4, 3, 3>

and

Y =

<4, 2, 1>
<8, 3, 4>
<4, 3, 3>
<8, 4, 3>

In this case <4,2,1> and <4,3,3> go in both relations. I'd like each to go only into the first relation (A) whose conditions they fit.

NOTE: I know I can do this in two steps by first splitting the first condition off along with it's complement and then splitting the second condition off only the complement, but I'm hoping for a one step solution (or one that at least scales better to many splits) if one exists.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文