2012-03-22 7 views
8

Tôi đang cố gắng viết một tập lệnh chữ Latinh lợn để kéo số lượng tập dữ liệu mà tôi đã lọc.Không thể suy ra COUNT chức năng

Dưới đây là kịch bản cho đến nay:

/* 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; 

Đối với một số lý do, tôi nhận được lỗi:

Could not infer the matching function for org.apache.pig.builtin.COUNT as multiple or none of them fit. Please use an explicit cast.

Tôi đang làm gì sai ở đây? Tôi cho rằng nó có liên quan đến loại trường tôi đang đi vào, nhưng tôi không thể giải quyết được điều này.

TIA, Jason

Trả lời

14

Đây có phải là những gì bạn đang tìm kiếm (nhóm bởi tất cả để mang lại tất cả mọi thứ vào một túi, sau đó đếm số mặt hàng):

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; 
+2

Đó là (trừ" FOREACH g "phải là" FOREACH được nhóm ") - cảm ơn Chris! – JasonA

+0

Đã chỉnh sửa, cảm ơn bài đánh giá –

0

lẽ

/* 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; 
+0

nhờ Jake - không may, không may mắn. cung cấp cho tôi: 'Phép chiếu vô hướng không hợp lệ: productscans: Một cột cần được chiếu từ một mối quan hệ để nó được sử dụng như một vô hướng ' – JasonA

4

COUNT yêu cầu câu lệnh GROUP ALL trước cho tổng số toàn cầu và câu lệnh GROUP BY cho số lượng nhóm.

Bạn có thể sử dụng bất kỳ dưới đây:

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; 

Hoặc

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;