0

I have input like:

(1, (a, b, c))
(2, (e, f, g))

The output I expected is like:

(1, a)
(1, b)
(1, c)
(2, e)
(2, f)
(2, g)
PSJay Peng
  • 321
  • 2
  • 8

3 Answers3

0

May be it will help you:

A = LOAD 'data' AS (int:a, t1:tuple(t1a:chararray, t1b:chararray,t1c:chararray));

B = FOREACH A GENERATE a,t1.$0,t1.$1,t1.$2;

C = group B by a;


X = COGROUP C BY a, C BY $0;

DUMP X;
Ravi H
  • 596
  • 3
  • 23
0

Can you try this?

A = LOAD 'input.txt' USING PigStorage() AS (f1:int,T:tuple(f2:chararray,f3:chararray,f4:chararray));
B = FOREACH A GENERATE f1,FLATTEN(TOBAG(T.f2,T.f3,T.f4));
DUMP B;
Sivasakthi Jayaraman
  • 4,724
  • 3
  • 17
  • 27
0

Step 1: Load input file

1 a,b,c

2 e,f,g

as

crude_input = load '' USING PigStorage() AS (id:int, ip_tuple:tuple(val1:chararray, val2:chararray, val3:chararray));

dump crude_input;

(1,(a,b,c))

(2,(e,f,g))

Step 2:

crude_flatened = foreach crude_input GENERATE id, FLATTEN($1);

This will generate

(1,a,b,c)

(2,e,f,g)

Step 3:

output_data = foreach crude_flatened generate id, FLATTEN(TOBAG(ip_tuple::val1,ip_tuple::val2,ip_tuple::val3));

(1,a)

(1,b)

(1,c)

(2,e)

(2,f)

(2,g)

KP Fingh
  • 79
  • 2