2 つの hbase 入力エイリアスがあります。
X:
(a1,b2)
(a2,b2)
...
(an,bn)
Y:
(c1)
(c2)
...
(cn)
ここで、両方のエイリアスを「結合」したいと思います。X の最初の行と Y の最初の行です。最終結果は次のようになります。
RESULT:
(a1,b1,c1)
(a2,b2,c2)
...
(an,bn,cn)
どうやってやるの?
2 つの hbase 入力エイリアスがあります。
X:
(a1,b2)
(a2,b2)
...
(an,bn)
Y:
(c1)
(c2)
...
(cn)
ここで、両方のエイリアスを「結合」したいと思います。X の最初の行と Y の最初の行です。最終結果は次のようになります。
RESULT:
(a1,b1,c1)
(a2,b2,c2)
...
(an,bn,cn)
どうやってやるの?
Pig の基本原則は、順序は重要ではないということです。より一般的には、リレーションはタプルのリストではなく、タプルのセットです。データにとって順序が重要である場合は、データがたまたま格納される方法ではなく、データ自体に反映する必要があります。
それでも、データをロードするときに Pig が希望する順序でデータを処理することを保証できる場合、回避策は存在します。DataFuEnumerate
から 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;