无法在pig中进行类型转换

aurhwmvo  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(306)

我得到的平均功能错误。任何人都可以帮助以下脚本:(我需要使用元组或袋加载时?)谢谢。

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);
bjg7j2ky

bjg7j2ky1#

你没有分配 temp 当你 LOAD 你的数据被篡改了。所以当Pig试图呼叫 AVG 函数,并检查要使用的版本(因为如果字段是 int 而不是一个 double ,例如),它不能告诉如何继续。给予 temp a型(如 temp:int )在你的 LOAD 声明,它应该起作用。
在您的例子中,您还没有正确指定字段。你需要通过 AVG 要评估的包。你通过突出 temp 记录袋中的字段 C . 的模式 C{(group:(year,temp)), tmpdata:{(stn,year:chararray,temp)})} ,所以需要计算 avgtemp 这样地:

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

相关问题