Свинья не может загрузить сумку
Я пытаюсь загрузить тип данных bag в таблицу pig и вместо этого я получаю нулевые значения.
Пример ввода:
A000,B000,C000,1.0,1-1-14,3-31-14,{(A101,1-Jan-2014,0.03,0.04)}
A001,B001,C001,10.0,1-1-14,3-31-14,{(A101,1-Jan-2014,0.03,0.045)}
A002,B002,C002,100.0,1-1-14,3-31-14,{(A101,1-Jan-2014,0.03,0.04)}
Свинья Скрипт:
raw = LOAD 'input/meh.log' USING PigStorage(',') AS (PID, FUNDID, GICID, balance, startDate, endDate, rates:bag{t:tuple(t1,t2,t3,t4)});
DUMP raw;
Выход:
(A000,B000,C000,1.0,1-1-14,3-31-14,)
(A001,B001,C001,10.0,1-1-14,3-31-14,)
(A002,B002,C002,100.0,1-1-14,3-31-14,)
^Bag values should be here
Что я делаю неправильно? Я попытался удалить объявления bag/tuple из функции LOAD, но ничего не получилось. Я использовал этот же подход при работе над учебником по сумкам, который шел вместе со свиньей, и это, казалось, работало очень хорошо.
ОБНОВЛЕНИЕ: Если я установлю входные данные мешка так, чтобы у каждого кортежа было одно значение, то этот скрипт работает. Я начинаю думать, что это может быть проблемой с моей версией Pig (0.12.2). Мне пришлось собрать Pig с использованием Ant, чтобы он мог работать на Hadoop 2.3. Мысли?
1 ответ
Переформатировал данные
A000 B000 C000 1 1-1-14 3-31-14 {(101,1-Jan-2014,0.03,0.04)}
A001 B001 C001 10 1-1-14 3-31-14 {(101,1-Jan-2014,0.03,0.04)}
A002 B002 C002 100 1-1-14 3-31-14 {(101,1-Jan-2014,0.03,0.04)}
Имейте значения, разделенные вкладками. Как ни странно, это работает. У меня был установлен разделитель "", что могло сбить с толку свинью, когда она пыталась прочитать пакет. Я думаю, если у вас есть пакеты с многомерными кортежами, либо установите разделитель на что угодно, но не на ',' или просто не устанавливайте его вообще.