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)}。

4

2 に答える 2

0

COUNT 関数は、フィールドではなく BAG の名前を取ります。そのはず:

D = FOREACH C GENERATE COUNT(B) ;
于 2013-10-18T14:45:49.837 に答える
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 は、データセット全体を数えたい場合にのみ使用されます。注意しないと、すべてのデータが単一の削減タスクで処理されるため、Group by all は非常に慎重に使用する必要があります。

于 2013-10-18T15:40:56.520 に答える