13

PIGを初めて使用し、次のような1列のデータの平均を計算したい

0
10.1
20.1
30
40
50
60
70
80.1

この豚のスクリプトを書きました

dividends = load 'myfile.txt' as (A);
dump dividends
grouped   = group dividends by A;
avg       = foreach grouped generate AVG(grouped.A);
dump avg

データを次のように解析します

(0)
(10.1)
(20.1)
(30)
(40)
(50)
(60)
(70)
(80.1)

しかし、平均的にこのエラーを与えます

2013-03-04 15:10:58,289 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: Pig script failed to parse: 
<file try.pig, line 4, column 41> Invalid scalar projection: grouped
Details at logfile: /Users/PreetiGupta/Documents/CMPS290S/project/pig_1362438645642.log

何か案が

4

3 に答える 3

22

組み込み関数はAVGバッグを入力として受け取ります。あなたのgroupステートメントでは、現在 の値で要素をグループ化していますがA、本当にやりたいことは、すべての要素を 1 つのバッグにグループ化することです。

GROUP ALLはあなたが使いたいものです:

dividends = load 'myfile.txt' as (A);
dump dividends
grouped   = group dividends all;
avg       = foreach grouped generate AVG(dividends.A);
dump avg
于 2013-03-05T01:25:47.290 に答える
5

以下は、平均を計算するために機能します。

dividends = load 'myfile.txt' as (A);
grouped   = GROUP dividends all;
avg       = foreach grouped generate AVG(dividends);
dump avg
于 2013-03-06T07:41:34.870 に答える
1

グループ変数を使用する代わりに、元のデータ変数名を使用する必要があります。FOREACHラインでは、代わりに を使用していAVG(dividends.A)ますAVG(grouped.A)。ソリューション スクリプトは次のとおりです。

dividends = load 'myfile.txt' as (A);
dump dividends

grouped   = group dividends by A;
avg = foreach grouped generate AVG(dividends.A);
dump avg
于 2021-06-06T04:10:02.373 に答える