Group by 上的猪优化

Posted

技术标签:

【中文标题】Group by 上的猪优化【英文标题】:Pig Optimization on Group by 【发布时间】:2015-07-08 07:32:39 【问题描述】:

假设我有一个大型数据集,按照以下架构布局

id,name,city
---------------
100,Ajay,Chennai
101,John,Bangalore
102,Zach,Chennai
103,Deep,Bangalore
....
...

我有两种风格的猪代码给我相同的输出。

样式 1:

records = load 'user/inputfiles/records.txt' Using PigStorage(',') as (id:int,name:chararray,city:chararray);
records_grp = group records by city;
records_each = foreach records_grp generate group as city,COUNT(records.id) as emp_cnt;
dump records_each;

样式 2:

records = load 'user/inputfiles/records.txt' Using PigStorage(',') as (id:int,name:chararray,city:chararray);
records_each = foreach (group records by city) generate group as city,COUNT(records.id) as emp_cnt;
dump records_each ;

在第二种样式中,我使用了嵌套的 Foreach。样式 2 代码是否比样式 1 代码运行得更快。

我想减少完成那份猪工作所花费的总时间..

所以样式 2 代码实现了这一点?或者对所花费的总时间没有影响?

如果有人确认我,那么我可以在具有非常大数据集的集群中运行类似的代码

【问题讨论】:

你有没有比较这些语句的解释输出?如果最终执行计划在某些时候有所不同,应该给你一个提示。此外,为 group by 设置手动并行值可以通过使用更多 reducer 来提高性能。 好的。寻找哪个计划? Mapreduce 计划? 是的,生成的执行计划。应该告诉您是否涉及更多/更少的映射或减少阶段。 好的。感谢您的回复 【参考方案1】:

解决方案的成本相同。

但是,如果 records_grp 没有在其他地方使用,版本 2 允许您不声明变量并且您的脚本更短。

【讨论】:

以上是关于Group by 上的猪优化的主要内容,如果未能解决你的问题,请参考以下文章

如何使用具有多个 GROUP BY、子查询和 WHERE IN 在大表上的查询来优化查询?

MySQL 查询优化与 group by 和 order by rand

group by 优化大法

MySQL的SQL语句优化-group by语句的优化

group by 的优化

MySQL调优--05---多表查询优化子查询优化 ORDER BY优化GROUP BY优化分页查询优化