hadoop - 无法在 pig 里打字

标签 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);

最佳答案

在对数据进行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);

关于hadoop - 无法在 pig 里打字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17351332/

相关文章:

hadoop - YARN MapReduce 内存不足

hadoop - 把东西从 pig 的袋子里拿出来

apache-pig - 根据另一个查询的结果过滤列表

database - 从汇总的Weblogs数据中检索信息,该怎么做?

networking - Cloudera Hadoop 在 EC2 上使用 Vagrant - 如何设置主机、IP 和网络?

api - 最容易学习的 API/创建用于在 hadoop 上运行 mapreduce 的 Web 应用程序的方法?

hadoop - 使用安装在Apache Hadoop和Cloudera Hadoop中的apache sqoop有什么区别?

python - 是否可以将 Conda 环境用作 Hadoop 流作业(在 Python 中)的 "virtualenv"?

java - hadoop没有将输出写入文件

api - 我应该编写YARN应用程序hadoop 2.6.0吗?