2015-04-21 43 views
0

我是新來的豬,因此是一個絕對的初學者。使用PIG |計算平均值許多相同的條目

我有一個txt文件,其條目是這樣的:

Name   Matriculation Number Grade Name of Subject 
 
John William 078932832   2.7 Research 
 
John William 078932832   2.3 International Management 
 
John William 078932832   1.7 Math

正如你所看到的,在文本文件中有關於同一個人,但不同的科目許多條目(中課程)不同的成績。 我想計算每個學生的平均成績。對於樣本數據,我必須添加2.7,2.3和1.7,並將其除以計數(三)。結果將是2.23。應該爲列表中的每個學生制定這個程序。最後我希望有一個spearate .txt文件包含以下內容:

Name   Matriculation Number Overall Average Grade Number of Subjects 
 
John William 078932832   2.23     3

我怎樣才能做到這一點用豬?由於我是初學者,請提供必要的所有步驟以獲得結果。

謝謝!

+1

對於投票拒絕這個問題的成員 - 請評論最新錯誤的問題,讓新手學習關於如何在SO社區提出好問題。 –

回答

1

可能需要語法玩,但去類似於:

data_file= load 'yourText.txt' using PigStorage(' ') as (name:chararray,martNum:chararray,grade:float,nameSub:chararray); 

groupData= GROUP data_file by (name,martNum); 
result= FOREACH groupData GENERATE group, AVG(dat_file.grade),COUNT(data_file.nameSub); 
Dump result; 

這應該工作,注意AVG()是一個內置的功能,但它是在早期版本非常錯誤,所以如果它抱怨嘗試使用中位數()函數從DataFu庫,其他工作將編寫python UDF(你可以在官方豬網站上在線查找示例)

+0

嗨raging_russian,非常感謝你的回答!你能告訴我如何用原始數據指定我的.txt文件的路徑嗎?另外我怎樣才能得到一個單獨的.txt結果,這應該保存在文件系統文件中? – Pigger

+0

如果您在您的機器上本地運行豬,然後將您的文本文件放在與豬腳本相同的目錄/文件夾中,但是如果您在Hadoop服務器上運行,那麼您需要使用類似這樣的方式將文本文件上傳到HDFS「 hadoop fs -put textfile.txt desiredName.txt「 –