0

次の豚ラテン スクリプト:

data = load 'access_log_Jul95' using PigStorage(' ') as (ip:chararray, dash1:chararray, dash2:chararray, date:chararray, date1:chararray, getRequset:chararray, location:chararray, http:chararray, code:int, size:int);

splitDate = foreach data generate  size as size:int , ip as ip,  FLATTEN(STRSPLIT(date, ':')) as h;

groupedIp = group splitDate by h.$1;

a = foreach groupedIp{
    added = foreach splitDate generate SUM(size); --
    generate added;
};


describe a;

エラーが表示されます:

ERROR 1045: <file 3.pig, line 10, column 39> Could not infer the matching function for org.apache.pig.builtin.SUM as multiple or none of them fit. Please use an explicit cast.

このエラーにより、サイズを int としてキャストする必要があると思われますが、groupedIpフィールドを記述すると、次のスキーマが得られます。

groupedIp: {group: bytearray,splitDate: {(size: int,ip: chararray,h: bytearray)}}size が int であり、sum 関数で使用できることを示します。

sum 関数を間違って呼び出していますか? 入力ファイルなど、他に何か見たいことがあれば教えてください。

4

3 に答える 3

1

データのダンプをいくつか行います。コラムのいくつかはsize整数ではないに違いない。Pig はそれに遭遇して死ぬ。独自の isInteger udf をコーディングして、残りの処理の前にこれをチェックし、整数でないものを破棄することもできます。

于 2013-05-06T19:18:41.810 に答える
1

SUMAVGおよびCOUNTは常にバッグで機能する関数であるため、データをグループ化してから、以下のように元のセットと結合します。

A = load 'nyse_data.txt' as (exchange:chararray, symbol:chararray,date:chararray, pen:float,high:float, low:float, close:float,volume:int, adj_close:float);  
G = group A by symbol;  
C = foreach G generate group, SUM(A.open);
于 2014-10-16T20:31:32.993 に答える