Не могу вывести функцию COUNT - PullRequest
8 голосов
/ 22 марта 2012

Я пытаюсь написать латиноамериканский скрипт, чтобы получить счетчик отфильтрованного набора данных.

Вот сценарий на данный момент:

/* scans by title */

scans           = LOAD '/hive/scans/*' USING PigStorage(',') AS (thetime:long,product_id:long,lat:double,lon:double,user:chararray,category:chararray,title:chararray);
productscans    = FILTER scans BY (title MATCHES 'proactiv');
scancount       = FOREACH productscans GENERATE COUNT($0);
DUMP scancount;

По какой-то причине я получаю сообщение об ошибке:

Не удалось определить функцию сопоставления для org.apache.pig.builtin.COUNT как несколько или ни один из них не подходит.Пожалуйста, используйте явное приведение.

Что я здесь не так делаю?Я предполагаю, что это как-то связано с типом поля, которое я передаю, но я не могу решить эту проблему.

TIA, Jason

Ответы [ 3 ]

14 голосов
/ 23 марта 2012

Это то, что вы ищете (соберите все в одну сумку, затем посчитайте предметы):

scans           = LOAD '/hive/scans/*' USING PigStorage(',') AS (thetime:long,product_id:long,lat:double,lon:double,user:chararray,category:chararray,title:chararray);
productscans    = FILTER scans BY (title MATCHES 'proactiv');
grouped         = GROUP productscans ALL;
count           = FOREACH grouped GENERATE COUNT(productscans);
dump count;
4 голосов
/ 20 ноября 2014

COUNT требует предшествующего оператора GROUP ALL для глобальных подсчетов и оператора GROUP BY для подсчета групп.

Вы можете использовать любой из следующих:

scans           = LOAD '/hive/scans/*' USING PigStorage(',') AS (thetime:long,product_id:long,lat:double,lon:double,user:chararray,category:chararray,title:chararray);
productscans    = FILTER scans BY (title MATCHES 'proactiv');
grouped         = GROUP productscans ALL;
count           = FOREACH grouped GENERATE COUNT(productscans);
DUMP scancount;

Или

scans           = LOAD '/hive/scans/*' USING PigStorage(',') AS (thetime:long,product_id:long,lat:double,lon:double,user:chararray,category:chararray,title:chararray);
productscans    = FILTER scans BY (title MATCHES 'proactiv');
grouped         = GROUP productscans ALL;
count           = FOREACH grouped GENERATE COUNT($1);
DUMP scancount;
0 голосов
/ 22 марта 2012

Может

/* scans by title */

scans           = LOAD '/hive/scans/*' USING PigStorage(',') AS (thetime:long,product_id:long,lat:double,lon:double,user:chararray,category:chararray,title:chararray);
productscans    = FILTER scans BY (title MATCHES 'proactiv');
scancount       = FOREACH productscans GENERATE COUNT(productscans);
DUMP scancount;
...