Hadoop 如何为AVG功能投射清管器字段

Hadoop 如何为AVG功能投射清管器字段,hadoop,apache-pig,average,Hadoop,Apache Pig,Average,我正在尝试在上使用一些Pig函数。有一次我把范围缩小到乘客等级和票价(票价): 代码如下: sh echo "1. create FarePclass with two fields" FarePclass = FOREACH train GENERATE Pclass,Fare ; DUMP FarePclass; sh echo "2. create FareByClass grouping by Pclass" FareByPclass = GROUP FarePclass BY

我正在尝试在上使用一些Pig函数。有一次我把范围缩小到乘客等级和票价(票价):

代码如下:

sh echo "1. create FarePclass with two fields"
FarePclass   =  FOREACH train GENERATE Pclass,Fare ;
DUMP FarePclass;

sh echo "2. create FareByClass grouping by Pclass"
FareByPclass = GROUP FarePclass BY Pclass ;
--FareByPclass = GROUP FarePclass ALL;
--DUMP FareByPclass;

DESCRIBE FareByPclass;

sh echo "3. get average"
AvgFareByPclass = FOREACH FareByPclass GENERATE (float) SUM(FarePclass.Fare);
下面是步骤#1和输出中DUMP语句的一些示例行:

(2,10.5)
(3,7.05)
(3,29.125)
(2,13)
(1,30)
(3,23.45)
(1,30)
(3,7.75)
2. create FareByClass grouping by Pclass
FareByPclass: {group: chararray,FarePclass: {(Pclass: chararray,Fare: chararray)}}
3. get average
2014-08-28 20:56:23,288 ERROR org.apache.pig.tools.grunt.Grunt: ERROR 1045: 
<file titanic_dypler_datafu.pig, line 36, column 56> Could not infer the matching function for org.apache.pig.builtin.SUM as multiple or none of them fit. Please use an explicit cast.
(2,10.5)
(3,7.05)
(3,29.125)
(2,13)
(1,30)
(3,23.45)
(1,30)
(3,7.75)
2.按Pclass创建FareByClass分组
FareByPclass:{组:chararray,FarePclass:{(类:chararray,票价:chararray)}
3.平均
2014-08-28 20:56:23288错误org.apache.pig.tools.grunt.grunt:错误1045:
无法将org.apache.pig.builtin.SUM的匹配函数推断为多个或不匹配。请使用显式强制转换。
我有这个脚本,我正在尝试运行最后一行。 AvgFareByPclass=FOREACH FareByPclass生成(浮动)和(FarePclass.Fare)

我在尝试运行时遇到以下错误: 无法将架构为bag{:tuple(Fare:chararray)}的包强制转换为浮动


你能给我建议一下如何投FarePclass.Fare吗?我是否在概念上遗漏了一些关于如何进行的内容?

在您已经尝试求和它们之后,尝试将chararray票价转换为浮点数已经太晚了;它们必须是数字,然后才能求和。可能进行转换的最合理的地方是对FarePclass的第一个投影:

FarePclass   =  FOREACH train GENERATE Pclass,(float)Fare ;

谢谢你,乔纳森,这解决了我的问题。如果有人想知道,泰坦尼克号的平均票价是:头等舱:84.15美元二等舱:21.66美元三等舱:13.67美元。顺便说一句,我最初的目标是计算平均值,但我决定先求和,以防您注意到名称和函数调用之间的不匹配。再次感谢。