计算 PIG 中的平均值 |和其他东西

Posted

技术标签:

【中文标题】计算 PIG 中的平均值 |和其他东西【英文标题】:Calculate average in PIG | and other things 【发布时间】:2015-04-28 07:23:48 【问题描述】:

我是 PIG 的新手,因此绝对是初学者。

我有一个 .txt 文件,其条目如下所示:

Name         Matriculation Number Grade Name of Subject           ECTS
John William 078932832            2.7   Research                  5
John William 078932832            2.3   International Management  10
John William 078932832            1.7   Math                      5

如您所见,在文本文件中,有许多关于同一个人但不同科目(当然)成绩不同的条目。 我想计算每个学生的平均成绩。对于样本数据,我必须执行以下操作才能获得平均成绩: (2.7 * 5 + 2.3 * 10 + 1.7 * 5)/ 20 (ects 点的绝对数量)。此示例的结果为 2.25。应该为列表中的每个学生进行此程序。最后,我想要一个包含以下内容的独立 .txt 文件:

Name         Matriculation Number Average Grade Number of Subjects Number of ECTS
John William 078932832            2.25          3                  20

如何使用 PIG 做到这一点?由于我是初学者,请提供获得结果所需的所有步骤。

谢谢!

【问题讨论】:

【参考方案1】:

试试下面的猪脚本。

a = load '/pathtodata' as (name, matrix, grade, subject, ECTS); 
b = group a by (name, matrix);
c = foreach b avg = AVG(a.grade);count = COUNT(a.subject); sum= SUM(a.ECTS); generate group,avg,count,sum;;
d = foreach c generate flatten($0), flatten($1), flatten($2), flatten($3);
dump d;

确保您的数据是制表符分隔的,以便运行此脚本,或者在您的加载命令中使用 PigStorage('delimotor') 以供其他任何人使用。

【讨论】:

您好alekya reddy,非常感谢您的帮助。脚本运行良好,但我没有得到预期的结果;( 您是否使用制表符分隔数据?【参考方案2】:

脚本运行良好,但平均成绩计算不正确! 现有的逻辑是将所有等级相加,然后除以计数。 但是每个等级都必须乘以它的ects点,然后添加到另一个等级(它也必须乘以它的ects点等等)。完成此操作后,“成绩总和”必须除以每个学生的 ects 分数。

【讨论】:

【参考方案3】:

试试这个..

a = load '/piggrade.txt'  as (name:chararray, matrix:chararray, grade:double, subject:chararray, ECTS:long); 
n = foreach a GENERATE  name,matrix,(grade * ECTS) as (totgrades:double),subject,ECTS;


e = group n by (name, matrix);

f = foreach e 

   
   GENERATE   flatten(group) as (name,matrix),SUM(n.totgrades) as tg,SUM(n.ECTS) as sm,COUNT(n.subject) as sub;
 
g = foreach f GENERATE name,matrix,(tg/sm) as (Avg:double),sub,sm;
dump g;

输入文件必须用制表符分隔

【讨论】:

嗨,Sravan K Reddy,这很有魅力!我不知道这是否是最短的脚本,但它可以完成工作;)是否有可能在小数点后的第一个位置之后剪切所有内容?例如:avgGrade 的结果是 2.672930 => 2.6 应该是输出。 刚才我给出了小数截断的答案,如果答案有用请参考***.com/questions/29922857/…。请接受它

以上是关于计算 PIG 中的平均值 |和其他东西的主要内容,如果未能解决你的问题,请参考以下文章

Apache Pig 学生成绩平均计算

JAVA写个东西读取TXT中的数据 且要计算出平均值和总值 最后还要按总值排序

在 Pig 中使用多个条件过滤列

如何在Pig中找到一列的平均值和两列的减法平均值?

猪脚本循环通过计算平均值

用于查找每个部门的工资的最大值、最小值、平均值、总和的 Pig 脚本