无法在猪中进行转录

时间:2013-06-27 19:09:49

标签: hadoop mapreduce apache-pig

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

1 个答案:

答案 0 :(得分: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);