rushi_gerrard
rushi_gerrard

Reputation: 1

Pig - How to use a nested for loop in pig to get the list of elements inside a tuple?

I have an intermediate pig structure like (A, B, (n. no Cs)) example:

(a1,b1, (c11,c12))  
(a2,b2, (c21))  
(a3,b3, (c31,c32, c33))

Now, I want the data in format

(a1, b1, c11)  
(a1, b2, c12)  
(a2, b2, c21) etc.

How do I go about doing it?

Essentially I want the size of the tuples, and then use this size for running a nested for loop.

Upvotes: 0

Views: 1905

Answers (1)

Sivasakthi Jayaraman
Sivasakthi Jayaraman

Reputation: 4724

Can you try the below approach?

input

a1      b1      (c11,c12)
a2      b2      (c21)
a3      b3      (c31,c32,c33)

PigScript:

A = LOAD 'input' AS(f1,f2,T:(f3:chararray));
B = FOREACH A GENERATE f1,f2,FLATTEN(T);
C = FOREACH B GENERATE f1,f2,FLATTEN(TOKENIZE(T::f3));
DUMP C;

Output:

(a1,b1,c11)
(a1,b1,c12)
(a2,b2,c21)
(a3,b3,c31)
(a3,b3,c32)
(a3,b3,c33)

Upvotes: 2

Related Questions