Pig Latin: загрузка очень простой сумки

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

3 {(car pen house glass)}
5 {(battery phone)}
6 {(the)}

(Я хотел бы уточнить, что я добавил "(" и ")" в исходный файл, потому что они отсутствовали). Моя цель - просто загрузить этот файл (используя LOAD) в переменную и выгрузить его (используя DUMP).

Ниже я показываю предпринятые мной попытки и их относительные результаты DUMP:

wc = LOAD 'input.txt' USING PigStorage(' ') AS (count:int,b:bag{(s:chararray)});

(3,)
(5,)
(6,{(the)})


wc = LOAD 'input.txt' USING PigStorage(' ') AS (count:int,b:tuple(s:chararray));

(3,)
(5,)
(6,(the))


wc = LOAD 'input.txt' USING PigStorage(' ') AS (count:int,b:bag{item:tuple(s:chararray)});

(3,)
(5,)
(6,{(the)})

Есть ли у вас идеи, чтобы решить это?

Заранее спасибо.

1 ответ

Проблема здесь в том, что вы используете ' ' в качестве разделителя, а пакет содержит ' '. Обходной путь - загрузить записи в строку, а затем использовать STRSPLIT, чтобы разбить строку на 2 поля.

wc = LOAD 'input.txt' AS (line:chararray);
wc_new = FOREACH wc GENERATE STRSPLIT(line,' ',2);
DUMP wc_new;
Другие вопросы по тегам