0

AVG 関数でエラーが発生しています。誰でも次のスクリプトを手伝ってもらえますか: (読み込み中にタプルまたはバッグを使用する必要がありますか?) ありがとう。

mydata = LOAD 'bigdata.txt' USING PigStorage(',')  AS (stn , wban, yearmoda,   temp, a ,  dewp :double, b ,  slp :double,  c,  stp :double, d, visib :double, e,  wdsp :double,  f, mxspd :double,  gust :double,   max :double,  min :double, prcp :double, sndp :double, frshtt);

clean1 = FOREACH mydata GENERATE stn , wban, yearmoda,   temp, a ,  dewp, b ,  slp,  c,  stp, d, visib, e,  wdsp,  f, mxspd,  gust,   max ,  min, prcp  ,sndp , frshtt;

--clean2 = FILTER clean1 BY (temp == 9999.9);

tmpdata = FOREACH clean1 GENERATE stn, SUBSTRING(yearmoda, 0, 5) as year, temp;
C = GROUP tmpdata BY (year, temp);

avgtemp = FOREACH C GENERATE group, AVG(temp);
4

1 に答える 1

0

データを編集tempしたときにタイプを割り当てませんでした。LOADそのため、Pig が関数を呼び出そうとすると、AVGどのバージョンを使用するかを確認します (たとえば、フィールドがintではなく である場合、動作が異なる必要があるdoubleため)、処理方法を判断できません。ステートメントにtempタイプ ( などtemp:int) を指定するLOADと、機能するはずです。

あなたの場合、フィールドを正しく指定していません。AVG評価するにはバッグを渡す必要があります。tempのレコードのバッグからフィールドを投影して、このバッグを作成しCます。のスキーマC{(group:(year,temp)), tmpdata:{(stn,year:chararray,temp)})}であるため、次のように計算する必要がありますavgtemp

avgtemp = FOREACH C GENERATE group, AVG(tmpdata.temp);
于 2013-06-27T19:16:01.633 に答える