2013-10-18 80 views
0

我在許多子目錄中有許多文件,所有文件都以逗號分隔。我想通過組第一場中的每個文件並運行記錄總數由多個文件組成

A = LOAD '/files/*' USING PigStorage(',') as (f1, f2, f3, f4, f5); 
B = GROUP A ALL; 
C = GROUP B BY f1; 
D = FOREACH C GENERATE COUNT(f1) ; 
DUMP D; 

這段代碼給了我我錯誤

無效場投影。計劃字段[f1]在模式中不存在:group:chararray,A:bag {:tuple(f1:chararray,f2:bytearray,f3:bytearray,f4:bytearray,f5:bytearray)}。

回答

0

你不需要做GROUP BY ALL

的問題是,你被F1試圖B組。 f1不存在於B中。

A = LOAD '/files/*' ... 
B = GROUP A BY f1; 
C = FOREACH B GENERATE COUNT(A); 
DUMP C; 

試試看。

只有當您想要對整個數據集進行計數時才使用Group by all。所有的小組都應該非常小心地使用,因爲如果不小心的話,所有的數據將在單個減少任務中處理。

+0

謝謝!那就是訣竅。 – Jimmy

0

COUNT函數採用BAG的名稱而不是字段的名稱。它應該是:

D = FOREACH C GENERATE COUNT(B) ; 
+0

謝謝你的快速回答,錯誤信息是在線3 C = ... – Jimmy