2015-02-21 2 views
0

у меня есть этот набор кортежей какРазделить кортеж массива строк в нескольких кортежей

A = 
(1, ["Football","Baseball"]) 
(2, ["Swimming","Baseball"]) 

Я хочу, чтобы разбить кортежи, основанные на массиве строк, так что конечный результат что-то вроде этого

(1, "Football") 
(1, "Baseball") 
(2, "Swimming") 
(2, "Baseball") 

Как это сделать в свинье?

ответ

0

Сначала удалите символ '[' и ']' от входа, используя REPLACE функцию, а затем обернуть вывод в bag и flatten его.

вход

1,["Football","Baseball"] 
2,["Swimming","Baseball"] 

PigScript:

A = LOAD 'input' USING PigStorage(',') AS (f1:int,f2:chararray,f3:chararray); 
B = FOREACH A GENERATE f1,FLATTEN(TOBAG(REPLACE(f2,'[\\[\\]]',''),REPLACE(f3,'[\\[\\]]',''))); 
DUMP B; 

Выход:

(1,"Football") 
(1,"Baseball") 
(2,"Swimming") 
(2,"Baseball") 
+0

@Sivasajthi. На самом деле, нет 3 столбца, есть 2 столбца, первый - это id, а второй - массив игр, которым нравится человек с данным идентификатором. Это не строка, а массив строк. – user12331

+0

@ user12331, Pig не поддерживает тип массива типа массива, указанный выше вход будет рассматриваться как простая строка, а не массив строк (у свиньи нет никакого интеллекта, чтобы знать его массив строк). когда вы применяете «,» в качестве разделителя, свиньи отделяют ваш вход как (col1 = 1, col2 = [«Футбол» и col3 = «Бейсбол»]). –

Смежные вопросы