我有兩個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