【问题标题】:Calculate Average using PIG | many same entries使用 PIG 计算平均值 |许多相同的条目
【发布时间】:2015-04-21 22:18:15
【问题描述】:

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

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

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

如您所见,在文本文件中,有许多关于同一个人但不同科目(当然)成绩不同的条目。 我想计算每个学生的平均成绩。对于样本数据,我必须将 2.7、2.3 和 1.7 相加,然后除以计数(三)。结果将是 2.23。应该为列表中的每个学生进行此程序。最后,我想要一个包含以下内容的独立 .txt 文件:

Name         Matriculation Number Overall Average Grade Number of Subjects
John William 078932832            2.23                  3

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

谢谢!

【问题讨论】:

  • 对于对这个问题投了反对票的会员 - 请评论问题有什么问题,让新手了解如何在 SO 社区提出好的问题。

标签: hadoop apache-pig


【解决方案1】:

可能需要使用语法,但类似于:

data_file= load 'yourText.txt' using PigStorage('    ') as (name:chararray,martNum:chararray,grade:float,nameSub:chararray);

groupData= GROUP data_file by (name,martNum);
result= FOREACH groupData GENERATE group, AVG(dat_file.grade),COUNT(data_file.nameSub);
Dump result;

这应该可以工作,注意 AVG() 是一个内置函数,但在早期版本中它有很多错误,所以如果它抱怨尝试使用 DataFu 库中的 Median() 函数,其他解决方法是编写 python UDF(你可以找到猪官网上的例子)

【讨论】:

  • 您好 raging_russian,非常感谢您的回答!您能告诉我如何使用原始数据指定 .txt 文件的路径吗?还有我怎样才能得到一个单独的 .txt 的结果,应该保存在文件系统文件中?
  • 如果您在机器上本地运行 pig,则将文本文件放在与 pig 脚本相同的目录/文件夹中,但如果您在 Hadoop 服务器上运行,则需要上传您的文本文件使用类似“hadoop fs -put textfile.txt desiredName.txt”的东西到HDFS
猜你喜欢
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
  • 2017-02-06
  • 2022-08-17
相关资源
最近更新 更多