2014-08-29 156 views
1

我想在Titanic data上使用一些豬功能。有一次,我縮小它客車類及票價(票價):如何鑄AVG功能豬場

下面的代碼:

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(Fare:chararray)}將包放置爲浮動。

您能否建議如何投FarePclass.Fare?我在概念上錯過了關於如何去做這件事的東西?

回答

0

在您已經嘗試總結它們之後,嘗試將chararray票價轉換爲浮點數字爲時已晚;他們需要數字,然後才能拿到他們的總和。可能最明智的地方做轉換是在FarePclass的第一個投影:

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

謝謝喬納森,這解決了我的問題。如果有人想知道,泰坦尼克號門票的平均票價是:頭等艙:84.15美元二等艙:21.66美元三等艙:13.67美元。順便說一句,我最初的目標是計算平均值,但我決定讓SUM首先工作,以防萬一您注意到名稱和函數調用之間的不匹配。再次感謝。 – Jazzmine 2014-08-29 01:53:49