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;