为啥我们需要在猪中运行平均函数之前对关系进行分组

Posted

技术标签:

【中文标题】为啥我们需要在猪中运行平均函数之前对关系进行分组【英文标题】:Why do we need to group a relation before running Average function in pig为什么我们需要在猪中运行平均函数之前对关系进行分组 【发布时间】:2016-03-14 05:51:26 【问题描述】:

请考虑一下猪脚本的这个例子..

我有一个如下的小数据集..称为

student_details.txt

001,Rajiv,Reddy,21,9848022337,海得拉巴,89 002,siddarth,Battacharya,22,9848022338,加尔各答,78 003,Rajesh,Khanna,22,9848022339,德里,90 004,Preethi,Agarwal,21,9848022330,浦那,93 005,Truphi,Mohanthy,23,9848022336,Bhuwaneshwar,75 006,Archana,米什拉,23,9848022335,钦奈,87 007,Komal,纳亚克,24,9848022334,trivendram,83 008,Bharathi,Nambiayar,24,9848022333,Chennai,72

想法是计算学生的平均 GPA。

通过运行以下命令得到解决方案

student_details = LOAD '/home/edureka/praveen/files/student_details.txt' 使用 PigStorage(',') as (id:int, firstname:chararray, lastname:chararray, age:int, phone:chararray, city :chararray, gpa:int);

student_group_all = 分组 student_details 全部;

student_gpa_avg = foreach student_group_all 生成 (student_details.firstname, student_details.gpa), AVG(student_details.gpa);

我的问题是,为什么我需要对 ALL 进行分组以找到一个平均值。如果有一个简单的平均值函数我可以直接在 student_details 上运行。请帮忙,因为我的常识很容易折腾..可能是我用的太多了!!

【问题讨论】:

您想知道为什么需要goup by ALL 或为什么需要group by 实际上我主要关心的是,如果我们已经有一个包含所有行数据的关系......可以在不分组的情况下完成平均...... 【参考方案1】:

如果你 google "Aggregate function" ,会出现以下定义 -

在数据库管理中,聚合函数是一种函数,其中多行的值被组合在一起作为特定标准的输入,以形成具有更重要意义或度量的单个值,例如集合、袋子或列表.常见的聚合函数包括:Average()(即算术平均值)Count()。

希望这能让你的常识放松一点:)

【讨论】:

我明白,但是需要额外的聚合......我们已经有一个包含学生详细信息的关系,并且可以在其上应用平均函数......

以上是关于为啥我们需要在猪中运行平均函数之前对关系进行分组的主要内容,如果未能解决你的问题,请参考以下文章

在猪中增加映射器

在猪中找到原子的长度

在猪中使用 AvroStorage()

在猪中解析复杂的json?

在猪中正确加载日期时间

如何在猪中读取json数据?