PIg скаляр больше 0 - PullRequest
       38

PIg скаляр больше 0

0 голосов
/ 22 ноября 2018

У меня есть следующий код

Data1 = LOAD '/user/cloudera/Class Ex 2/Data 1' USING PigStorage(',') as (Name:chararray,ID:chararray,text_1:chararray,Grade_1:int,Grade_2:int,Grade_3:int,Grade_4:int);
Data2 = LOAD '/user/cloudera/Class Ex 2/Data 2' USING PigStorage(',') as (Name:chararray,ID:chararray,text_2:chararray,Grade_5:int,Grade_6:int,Grade_7:int,Grade_8:int);

Data_3 = JOIN Data1 BY Data1.ID,Data2 BY Data2.ID;
Data_4 = FOREACH Data_3 GENERATE $0,$1,$2,$3,$4,$5,$6,$9,$10,$11,$12,$13;

Data_5 = FOREACH Data_4 GENERATE
                            Name,
                            ID,
                            text_1,
                            SIZE(text_1),
                            REPLACE(text_1,'or',''),
                            SIZE(REPLACE(text_1,'or','')),
                            SIZE(text_1)-SIZE(REPLACE(text_1,'or','')),
                            text_2,
                            SIZE(text_2),
                            REPLACE(text_2,'or',''),
                            SIZE(REPLACE(text_2,'or','')),
                            SIZE(text_2)-SIZE(REPLACE(text_2,'or','')),
                            ($3+$4+$5+$6+$8+$9+$10+$11)/8;
DESCRIBE Data_5;
STORE Data_5 Into '/user/cloudera/Class Ex 2/Data_output' USING PigStorage(',');

По сути, мне нужно загрузить 2 набора данных, а затем сделать некоторые основные текстовые статистические данные и манипуляции.Все отлично работает до последнего утверждения, МАГАЗИН.Когда я добавляю его, я получаю скалярную ошибку.

Что я здесь не так делаю?Спасибо, ребята!

1 Ответ

0 голосов
/ 23 ноября 2018

Прежде всего, Pig оценивает только псевдоним ', который в итоге приводит к STORE или DUMP (это называется ленивой оценкой).Следовательно, ваша ошибка всегда была там;Он был пойман, когда вы добавили оператор STORE.Поскольку вы не вставили полную трассировку, я думаю, что ваша ошибка в третьем утверждении, где вы пытаетесь получить доступ к полю ID, используя оператор точки (.).Вам нужно изменить его на одно из следующих:

1) Обратитесь к полю ID напрямую, поскольку только одно поле с именем ID в обоих Data1 и Data2:

Data_3 = JOIN Data1 BY ID, Data2 BY ID;

2) Используйте :: вместо ., если вам необходимо устранить неоднозначность:

Data_3 = JOIN Data1 BY Data1::ID, Data2 BY Data2::ID;

Если вы хотите знать, почему оператор точки (.) вызвал ошибку, можетпомогите взглянуть на следующий вопрос: Получение исключения при попытке выполнить Pig Latin Script

...