Ошибка кода свиньи?
-
16-10-2019 - |
Вопрос
Запустив приведенный ниже сценарий свиньи, я получаю ошибку в строке 4: Если это группа, то я получаю ошибку. Если я перехожу от «группы» на «группу» в строке 4, то сценарий работает.
В чем разница между группой и группой?
LINES = LOAD '/user/cloudera/datapeople.csv' USING PigStorage(',') AS ( firstname:chararray, lastname:chararray, address:chararray, city:chararray, state:chararray, zip:chararray );
WORDS = FOREACH LINES GENERATE FLATTEN(TOKENIZE(zip)) AS ZIPS;
WORDSGROUPED = GROUP WORDS BY ZIPS;
WORDBYCOUNT = FOREACH WORDSGROUPED GENERATE GROUP AS ZIPS, COUNT(WORDS);
WORDSSORT = ORDER WORDBYCOUNT BY $1 DESC;
DUMP WORDSSORT;
Решение
«Группа» в строго более низком случае в Foreach - это то, что вы зацикливаете/группируете.
http://squarecog.wordpress.com/2010/05/11/group-operator-in-apache-pig/ говорит:
Когда вы группируете отношение, результатом является новое отношение с двумя столбцами: «группа» и название исходного отношения.
Названия столбцов чувствительны к корпусу, поэтому вы должны использовать «группу» с более низким содержанием в своем Foreach.
«Группа» в верхнем корпусе является оператором группировки. Вы не можете их смешать. Так что не делай этого.
Другие советы
Обычно группа/Cogroup используется для группировки отношения некоторым ключом. После того, как вы группируете отношение, опишите сгруппированное отношение. Вы можете найти Ex: описать Grp; GRP: {группа: chararray, a: {(имя: chararray, session: chararray, gpa: float)}}.
В приведенном выше результате вы можете найти «группу».
Если вы хотите выполнить какую -то операцию по сгруппированному отношению (GRP), вам следует использовать «группу», а не группу.