2017-06-04 41 views
0

我具有以下數據:鑄造在負荷與在分開的步驟

John,fl,3 
John,wt,3 
John,sp,4 
John,sm,3 
Mary,fl,3 
Mary,wt,3 
Mary,sp,4 
Mary,sm,4 

我想按名稱(第一列),以計算所述數據的平均GPA(第三列)。爲此,我創建了以下豬腳本,它工作得很好。

a = LOAD '/root/sample.txt' using PigStorage(',') as (name:chararray, other:chararray, gpa:int); 
b = group a by name; 
c = foreach b generate group, AVG(a.gpa); 

然後我重寫相同的腳本,如下所示。這一次鑄造列在單獨的步驟,而不是負擔,但下面的代碼給了我施展異常錯誤:

java.lang.Exception: java.lang.ClassCastException: org.apache.pig.data.DataByteArray cannot be cast to java.lang.String 
    at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462) 

a = LOAD '/root/sample.txt' using PigStorage(','); 
b = foreach a generate $0 as name:chararray, $1 as other:chararray, $2 as gpa:int; 
c = group b by name; 
d = foreach c generate group, AVG(b.gpa); 

我無法理解爲什麼???這兩個代碼示例如何不同?

+0

您可能在導致轉換錯誤的記錄之一中有空值。嘗試轉儲數據並同時描述a;在加載聲明之後。 –

回答