我有两个hbase输入别名:
X:
(a1,b2)
(a2,b2)
...
(an,bn)
Y:
(c1)
(c2)
...
(cn)
现在我想“加入”两个别名:X的第一行和Y的第一行。最后的结果应该是:
RESULT:
(a1,b1,c1)
(a2,b2,c2)
...
(an,bn,cn)
我该怎么做?
答案 0 :(得分:1)
猪的基本原则是秩序无关紧要。更一般地说,关系是元组的集,而不是元组的列。如果订单对您的数据很重要,那么这应该反映在数据本身中,而不是反映在它存储的方式上。
然而,如果您可以保证在加载数据时Pig会按您想要的顺序处理它,那么确实存在一种解决方法。使用DataFu中的Enumerate
UDF:
Xenum = FOREACH (GROUP X ALL) GENERATE FLATTEN(Enumerate(X));
Yenum = FOREACH (GROUP Y ALL) GENERATE FLATTEN(Enumerate(Y));
RESULT = FOREACH (JOIN Xenum BY i, Yenum BY i) GENERATE a, b, c;
答案 1 :(得分:1)
如果您使用的是猪0.11,那么您可以尝试使用RANK
运算符。类似的东西:
XR = RANK X ;
YR = RANK Y ;
RESULT = JOIN XR BY $0, YR BY $0 ;
如果您只是RANK X
,那么它将为每一行提供唯一的序列号。如果您执行RANK A by $0 DESC
之类的操作,则可能无法提供唯一的序列号。