9

私はPigにこのコードを持っています(win、request、responseはファイルシステムから直接ロードされた単なるテーブルです):

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

4

1 に答える 1

7

複数の結合を実行する場合は、フィールドに一意の識別子を使用することをお勧めします (bid_id など)。別の方法として、あいまいさを解消する演算子'::' を使用することもできますが、これはかなり汚いものになる可能性があります。

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);
于 2012-10-31T16:44:04.983 に答える