2016-07-13 5 views
0

Say схема похожа:PIG: Сплит элементы массива в разных строках

gen_data: {a: chararray,f: chararray} 

вход:(4,[IAB9, IAB9-7, IAB1, IAB9-30])

желаемый результат:

(4,IAB9) 

(4,IAB9-7) 

(4,IAB1) 

(4,IAB9-30) 

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

Я не могу получить вышеуказанный желаемый результат. Пожалуйста, помогите мне достичь этого результата. Любая помощь приветствуется.

ответ

0

Используйте '[' в качестве разделителя и загружайте данные. Это даст вам 4 и IAB9, IAB9-7, IAB1, IAB9-30]. Удалить, в первом столбце и ']' во втором колонке. Затем используйте STRSPLIT или TOKENIZE и TOBAG

A = LOAD 'data.txt' USING PigStorage('[') AS (f1:chararray,f2:chararray); 
B = FOREACH A GENERATE REPLACE(f1,',',''),REPLACE(f2,']',''); 
C = FOREACH B GENERATE $0,FLATTEN(STRSPLIT($1,',')); 
D = FOREACH C GENERATE $0,FLATTEN(TOBAG($1,$2,$3,$4)); -- Try TOBAG(*) if this doesn't work 
DUMP D; 
Смежные вопросы