Ошибка при попытке агрегирования данных с использованием Apache Pig - PullRequest
0 голосов
/ 26 октября 2018

Это код, который я запускаю:

bigrams = LOAD 's3://******' AS (bigram:chararray, year:int, occurrences:int, books:int);
bg_tmp = filter bigrams BY (occurrences >= 300) AND (books >= 12);
bg_tmp_2 = GROUP bg_tmp ALL;
occ_cnt = FOREACH bg_tmp_2 GENERATE bigram, SUM(bg_tmp_2.occurrences);
x = LIMIT occ_cnt 100;
DUMP x;

Это ошибка, которую я получаю, когда вычисляю occ_cnt

81201 [main] ERROR org.apache.pig.tools.grunt.Grunt  - ERROR 1200: Pig script failed to parse: <line 5, column 48> Invalid scalar projection: bg_tmp_218/10/26 16:05:07 ERROR grunt.Grunt: ERROR 1200: Pig script failed to parse: <line 5, column 48> Invalid scalar projection: bg_tmp_2
Details at logfile: /mnt/var/log/pig/pig_1540569826316.log

Понятия не имеюпочему это происходит.Я использую Apache Pig 0.17.0 и Hadoop 2.8.4 на AWS EMR

1 Ответ

0 голосов
/ 26 октября 2018

Я бы переписал ваш запрос как

bg_tmp_2 = GROUP bg_tmp by (bigram);
occ_cnt = FOREACH bg_tmp_2 GENERATE group, SUM(bg_tmp.occurrences);

Замена GROUP ALL, так как я думаю, что вы хотите СУММУ для каждой записи биграммы. Замена bg_tmp2 на bg_tmp, так как вы хотите сослаться на BAG bg_tmp внутри отношения bg_tmp_2.

(Если вы запустите "description bg_tmp_2", вы увидите следующую схему)

bg_tmp_2: {group: chararray,bg_tmp: {(bigram: chararray,year: int,occurrences: int,books: int)}}
...