2012-10-30 25 views
9

मैं सुअर में इस कोड है एक समूह (जीत, अनुरोध और प्रतिक्रिया सिर्फ टेबल फाइल सिस्टम पर सीधे लोड कर रहे हैं):सुअर, कैसे के बाद एक क्षेत्र का उल्लेख करने के लिए एक में शामिल होने और द्वारा

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); 

मूल रूप से मैं चाहता हूँ में शामिल होने और समूह के बाद bid_price योग है, लेकिन मैं कोई त्रुटि मिलती है:

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

मेरा अनुमान है कि मैं win.bid_price को सही ढंग से बात नहीं कर रहा हूँ है।

उत्तर

7

एकाधिक जॉइन करने पर मैं आपके फ़ील्ड के लिए अद्वितीय पहचानकर्ताओं का उपयोग करने की सलाह देता हूं (उदा। बोली_आईडी के लिए)। वैकल्पिक रूप से, आप disambiguation operator '::' का भी उपयोग कर सकते हैं, लेकिन यह बहुत गंदा हो सकता है।

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);