我已「由基團」上的關係,其結果進行的關係是類似於以下:生成從第二場在豬
g1,{a1,a2,a3}
g2,{b1,b2,b3,b4}
g3,{c1,c2,c3,c4,c5,c6}
...
所以第一字段被提起是組和第二一袋元組,每個袋子可以有不同數量的元素。我想要做的是生成一個新的關係,其中包含第二個字段中的所有元素。因此,輸出將會是: B = {a1,a2,a3,b1,b2,b3,b4,c1,c2,c3,c4,c5,c6}
您對此有何幫助?
薩拉
我已「由基團」上的關係,其結果進行的關係是類似於以下:生成從第二場在豬
g1,{a1,a2,a3}
g2,{b1,b2,b3,b4}
g3,{c1,c2,c3,c4,c5,c6}
...
所以第一字段被提起是組和第二一袋元組,每個袋子可以有不同數量的元素。我想要做的是生成一個新的關係,其中包含第二個字段中的所有元素。因此,輸出將會是: B = {a1,a2,a3,b1,b2,b3,b4,c1,c2,c3,c4,c5,c6}
您對此有何幫助?
薩拉
如果你想要什麼,我想你想你正在尋求建立一個新的關係,其中每個前身是從分組袋的元組現在的全部記錄。爲此,請使用FLATTEN
操作員,該操作員將包放入多個記錄中。如果你可以假定所有袋中的元組具有相同的架構,你還可以FLATTEN
那些推動的元組元素,以全面的領域:
如果A
是分組的結果,並
DESCRIBE A;
{(key:chararray, bag:{})}
你可以做
B = FOREACH A GENERATE FLATTEN(bag) AS tuple;
然後到元組充分行轉換,做
C = FOREACH B GENERATE FLATTEN(tuple);
您可以閱讀更多關於FLATTEN
here。
爲了得到像你開始什麼用的結果,我所做的:
grunt> A = LOAD '../../../input/tuplesSample.txt' using PigStorage(' ') AS (grupo:chararray, charo:chararray);
grunt> DESCRIBE A;
A: {grupo: chararray,charo: chararray}
grunt> B = GROUP A by grupo;
grunt> DESCRIBE B;
B: {group: chararray,A: {(grupo: chararray,charo: chararray)}}
grunt> C = FOREACH B GENERATE $0 as grupo, $1.charo as charos;
grunt> DESCRIBE C;
C: {grupo: chararray,charos: {(charo: chararray)}}
grunt> DUMP C;
C: {grupo: chararray,charos: {(charo: chararray)}}
(g1,{(a1),(a2),(a3)})
(g2,{(b4),(b3),(b2),(b1)})
(g3,{(c4),(c5),(c6),(c2),(c1),(c3)})
然後我做了這個,給你一個包含在一個單一的所有元素的新的關係(以下E
)袋。
grunt> D = FOREACH C GENERATE FLATTEN($1) as charos;
grunt> DESCRIBE D;
D: {charos: chararray}
grunt> E = GROUP D ALL;
grunt> DESCRIBE E;
E: {group: chararray,D: {(charos: chararray)}}
grunt> DUMP E;
(all,{(c3),(c1),(c2),(c6),(c5),(c4),(b1),(b2),(b3),(b4),(a3),(a2),(a1)})
所以你想擁有一個包的所有元素?分組的意義何在? –
我對每個組成員(pairwise diff)做了一些處理,然後想要參加聯合 –