使用 group by 和 MAX 函数的 Pig Latin 查询
Posted
技术标签:
【中文标题】使用 group by 和 MAX 函数的 Pig Latin 查询【英文标题】:Pig Latin query using group by and MAX function 【发布时间】:2013-04-15 04:07:57 【问题描述】:给定表格:
Place(name, province, population, mayorid)
你会如何用 Pig Latin 编写以下查询? 为每个省返回人口最多的地方。您的结果集应包含省名、地名和该地的人口。
【问题讨论】:
一如既往:你尝试过什么?这个网站不是为其他人做你的工作,而是帮助你解决你的问题。您需要先阅读文档并亲自尝试。 我已经阅读了文档..问题是我还必须返回名称,这意味着这应该使用子查询来完成,但我不知道B = GROUP place BY province; X = FOREACH B GENERATE province, MAX(population);
好吧。 试试。一点一点地写,当你卡住的时候,问一个问题。包括您想要什么、您尝试过什么以及为什么它不起作用。
我们这些极客也不再做别人的功课了。
【参考方案1】:
还没有测试过,但是类似
places = LOAD 'placesInput' AS (name, province, population, mayorid);
placesProjected = FOREACH places GENERATE name,province,population;
placesGrouped = GROUP placesProjected by province;
biggestPlaces = FOREACH placesGrouped
sorted = ORDER placesProjected by population DESC;
maxPopulation = LIMIT sorted 1;
GENERATE group as province, FLATTEN(maxPopulation.name) as name, FLATTEN(maxPopulation.population) as population;
;
应该工作。
【讨论】:
以上是关于使用 group by 和 MAX 函数的 Pig Latin 查询的主要内容,如果未能解决你的问题,请参考以下文章
不能在 Group by/Order by/Where/ON 子句中使用 Group 或 Aggregate 函数(min()、max()、sum()、count()、...等)