2013-08-12 58 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那麼它開啓了不給一個唯一的序列號的可能性。