2017-05-28 12 views
0

J'ai un cas d'utilisationComment stocker des valeurs distinctes dans une liste pour la même clé à l'aide de porc

col1|col2 
a101|10 
a101|20 
a101|10 
a101|30 
a201|40 
a201|50 

Sortie prévue:

A101 | Liste < 10,20,30>

a201 | Liste < 40,50>

Ci-dessous est la requête, mais je ne reçois pas la sortie comme prévu. Je veux stocker des valeurs distinctes col2 dans une liste.

input1= load 'list1.csv' using PigStorage('|') as (col1: chararray, col2: int); 
input2 = DISTINCT (FOREACH input1 generate col1,col2); 
input3 = GROUP input2 by col1; 
dump input3; 
(a101,{(a101,30),(a101,20),(a101,10)}) 
(a201,{(a201,50),(a201,40)}) 

Répondre

1

Essayez ceci:

input1= load 'input.txt' using PigStorage('|') as (col1: chararray, col2: int); 
input2 = DISTINCT input1; --distinct not required but will remove duplicate rows 
input3 = GROUP input2 by col1; 
data = FOREACH input3 GENERATE FLATTEN(group) as col1, input2.col2 AS col2; 
DUMP data; 

Sortie Généré:

(a101,{(30),(20),(10)}) 
(a201,{(50),(40)}) 
+0

Il a collaboré avec les changements ci-dessus – a123