2013-08-12 37 views
2

我有两个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) 

我该怎么做?

+0

创建常用的连接键,例如使用REGEX_EXTRACT,然后使用连接操作。 – Frederic

回答

1

猪的一个基本原则是,顺序并不重要。更一般地,关系是一套元组,而不是一个元组的列表。如果为了对你的数据很重要,不应该由它正好存储的方式反映在数据本身。

然而,一个解决办法是存在的,如果你能保证,当你加载数据猪会处理它在你想要的顺序。从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

如果使用的是猪0.11,那么你可以尝试使用RANK操作。喜欢的东西:

XR = RANK X ; 
YR = RANK Y ; 
RESULT = JOIN XR BY $0, YR BY $0 ; 

如果你只是做RANK X然后它会给每行一个唯一的序列号。如果你这样做RANK A by $0 DESC那么它开启了不给一个唯一的序列号的可能性。