2012-10-30 23 views
9

Tôi có mã này trong Pig (chiến thắng, request và response chỉ là bảng nạp trực tiếp từ hệ thống tập tin):Pig, làm thế nào để đề cập đến một lĩnh vực sau khi một tham gia và một nhóm bởi

win_request = JOIN win BY bid_id, request BY bid_id; 
win_request_response = JOIN win_request BY win.bid_id, response BY bid_id; 

win_group = GROUP win_request_response BY (win.campaign_id); 

win_count = FOREACH win_group GENERATE group, SUM(win.bid_price); 

Về cơ bản tôi muốn tổng giá bid_price sau khi tham gia và nhóm, nhưng tôi gặp lỗi:

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

Tôi đoán là tôi không đề cập chính xác đến win.bid_price.

Trả lời

7

Khi thực hiện nhiều lần tham gia, tôi khuyên bạn nên sử dụng số nhận dạng duy nhất cho các trường của bạn (ví dụ: bid_id). Ngoài ra, bạn cũng có thể sử dụng disambiguation operator '::', nhưng điều đó có thể khá bẩn.

wins = LOAD '/user/hadoop/rtb/wins' USING PigStorage(',') AS (f1_w:int, f2_w:int, f3_w:chararray); 
reqs = LOAD '/user/hadoop/rtb/reqs' USING PigStorage(',') AS (f1_r:int, f2_r:int, f3_r:chararray); 
resps = LOAD '/user/hadoop/rtb/resps' USING PigStorage(',') AS (f1_rp:int, f2_rp:int, f3_rp:chararray); 

wins_reqs = JOIN wins BY f1_w, reqs BY f1_r; 
wins_reqs_reps = JOIN wins_reqs BY f1_r, resps BY f1_rp; 

win_group = GROUP wins_reqs_reps BY (f3_w); 

win_sum = FOREACH win_group GENERATE group, SUM(wins_reqs_reps.f2_w); 
Các vấn đề liên quan