Hadoop 使用清管器计算平均值

Hadoop 使用清管器计算平均值,hadoop,apache-pig,Hadoop,Apache Pig,我对PIG还不熟悉,我想计算一下我的单列数据的平均值 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)

我对PIG还不熟悉,我想计算一下我的单列数据的平均值

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
2013-03-04 15:10:58289[main]错误org.apache.pig.tools.grunt.grunt-错误1200:pig脚本无法解析:
无效的标量投影:已分组
日志文件中的详细信息:/Users/PreetiGupta/Documents/CMPS290S/project/pig_1362438645642.log

任何想法

内置的
AVG
功能都会将一个包作为输入。在
group
语句中,您当前正在按
A
的值对元素进行分组,但您真正想要做的是将所有元素分组到一个包中

Pig's
GROUP ALL
是您想要使用的:

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

以下内容将用于计算平均值:

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

您必须使用原始数据变量名,而不是使用组变量。在
FOREACH
行中,我使用
AVG(distributions.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