У меня есть следующие данные (загруженные в переменную A):
(a1:a2:a3|a4:a5:a6)
(b1:b2:b3)
(c1:c2:c3|c4:c5:c6|c7:c8:c9)
Я хочу, чтобы мой окончательный результат был следующим:
(a1:a2:a3)
(a4:a5:a6)
(b1:b2:b3)
(c1:c2:c3)
(c4:c5:c6)
(c7:c8:c9)
Вот что я сделал:
B = foreach B generate flatten(STRSPLIT($0, '\\|')) as splitted:chararray;
Это преобразовало данные в:
(a1:a2:a3,a4:a5:a6)
(b1:b2:b3)
(c1:c2:c3,c4:c5:c6,c7:c8:c9)
со следующей структурой:
B: {splitted: chararray}
Однако, когда я пытаюсь разбить этот chararray на отдельные кортежи, он выдает только первый элемент. Я пробовал несколько разных способов получить желаемый результат, но всегда получаю первый элемент. Вот несколько вещей, которые я пробовал:
req_output = foreach B generate flatten(STRSPLIT(splitted, ','));
req_output = foreach B generate flatten(TOBAG(*));
В обоих случаях я получаю следующий вывод:
(a1:a2:a3)
(b1:b2:b3)
(c1:c2:c3)
Я не уверен, почему это происходит. Как я могу получить все элементы в виде разных кортежей? У меня нет большого опыта в свиноводстве, поэтому любая помощь будет оценена по достоинству.