无法在清管器中打字



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

LOAD处理数据时,您没有为temp分配类型。因此,当Pig尝试调用AVG函数时,它会检查要使用哪个版本的函数(例如,如果字段是int而不是double,它的行为必须不同),它无法判断如何继续。在LOAD语句中给temp一个类型(类似于temp:int),它应该可以工作。

在您的情况下,您也没有正确指定字段。你需要通过AVG一个袋子来评估。您可以通过将temp字段投影到C中的记录包中来构造此包。C的模式是{(group:(year,temp)), tmpdata:{(stn,year:chararray,temp)})},所以您需要像这样计算avgtemp

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

相关内容

  • 没有找到相关文章

最新更新