我有两个HBase的输入别名:在Apache中合并两个数据集猪
X:
(a1,b2)
(a2,b2)
...
(an,bn)
Y:
(c1)
(c2)
...
(cn)
现在我想“加盟”两种别名:从X第一行与Y的第一行最后的结果应该是:
RESULT:
(a1,b1,c1)
(a2,b2,c2)
...
(an,bn,cn)
我该怎么做?
我有两个HBase的输入别名:在Apache中合并两个数据集猪
X:
(a1,b2)
(a2,b2)
...
(an,bn)
Y:
(c1)
(c2)
...
(cn)
现在我想“加盟”两种别名:从X第一行与Y的第一行最后的结果应该是:
RESULT:
(a1,b1,c1)
(a2,b2,c2)
...
(an,bn,cn)
我该怎么做?
猪的一个基本原则是,顺序并不重要。更一般地,关系是一套元组,而不是一个元组的列表。如果为了对你的数据很重要,不应该由它正好存储的方式反映在数据本身。
然而,一个解决办法是存在的,如果你能保证,当你加载数据猪会处理它在你想要的顺序。从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;
如果使用的是猪0.11,那么你可以尝试使用RANK
操作。喜欢的东西:
XR = RANK X ;
YR = RANK Y ;
RESULT = JOIN XR BY $0, YR BY $0 ;
如果你只是做RANK X
然后它会给每行一个唯一的序列号。如果你这样做RANK A by $0 DESC
那么它开启了不给一个唯一的序列号的可能性。
创建常用的连接键,例如使用REGEX_EXTRACT,然后使用连接操作。 – Frederic