如何为AVERAGE功能施放Pig字段

时间:2014-08-29 01:06:18

标签: hadoop apache-pig average

我想在Titanic data上使用一些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.

我有这个脚本,我正试图让最后一行运行。 AvgFareByPclass = FOREACH FareByPclass GENERATE(float)SUM(FarePclass.Fare);

尝试运行时出现此错误: 无法将带有架构的行李:bag {:tuple(票价:chararray)}浮动。

你能建议如何施放FarePclass.Fare吗?我在概念上遗漏了一些关于如何解决这个问题的事情吗?

1 个答案:

答案 0 :(得分:0)

你已经尝试过总结它们为时已晚,试图将chararray票价转换成浮点数;他们需要成为数字才能拿出他们的总和。进行转换的最明智的地方可能是对FarePclass的第一次投影:

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