1

フィールド内の値の合計の % を計算しようとしています。

たとえば、データ (名前、ct) の場合

(ジョン、1000年) (ダン、2000年) (リズ、2000年)

出力を (name, % of ct to the total) にしたい

(ジョン、.2) (ダン、.4) (リズ、.4)

data  = load 'fakedata.txt' as (name:chararray,sqr:chararray,ct:int);
A = foreach data generate name, ct;
A = FILTER A by ct is not null;
B = group A all;
C = foreach B generate SUM(A.ct) as tot;
D = foreach A generate name, ct/(double)C.tot;
dump D;

エラー org.apache.pig.tools.grunt.Grunt - エラー 1000: 解析中にエラーが発生しました。無効なエイリアス: {name: bytearray,ct: int} の C

http://pig.apache.org/docs/r0.10.0/basic.html セクションのコード例 - 「スカラーへの関係のキャスト」で指定されている方法を正確に従っています

Dump C と言うと、出力は 5000 として正しく生成されます。したがって、D に問題があります。どんな助けも大歓迎です。

4

2 に答える 2

1

以下は、エラーなしで機能します。これは基本的にあなたが持っているものと同じです。このエラーが発生する理由がわかりません。どのバージョンの豚を使用していますか?

data = load 'StackData' as (name:chararray, marks:int);
grp = GROUP data all;
allcount = foreach grp generate SUM(data.marks) as total;
perc = foreach data generate name, marks/(double)allcount.total;
dump perc
于 2013-03-10T17:10:27.390 に答える
0

RelationDでは、 Relation を再びループしていますA- それは について知っていることを知っていCます。

SUM を計算してから JOIN を実行して、各エントリに合計が含まれるようにすることをお勧めします。そうすれば、各エントリの合計 % を計算できます。

于 2013-03-10T14:14:28.567 に答える