Apache Pig GROUP BY ,ORDER BY

Posted

技术标签:

【中文标题】Apache Pig GROUP BY ,ORDER BY【英文标题】: 【发布时间】:2015-07-24 13:20:56 【问题描述】:

我有一个包含具有 playerName,gameName,score 的元组的包。 我首先 GROUP BY game 并把它放在另一个包里。现在我想在另一个包里每场比赛得分最高的元组。我应该怎么做?

【问题讨论】:

请分享用例的输入数据和预期输出 @MuraliRao 输入文件有这种形式的元组:jon,mario,2345 joe,minesweeper,234 peter,mario,112 lisa,minesweeper ,900 我想要每场比赛的最高得分者 ..mario ,jon ,2345 minesweeper,lisa,900.也就是说输出应该有 gameName ,playerName ,score 您可以使用每个嵌套来实现相同的效果。看看建议的答案,如果有帮助,请告诉我 【参考方案1】:

输入:

jon,mario,2345
joe,minesweeper,234
peter,mario,112
lisa,minesweeper,900

猪脚本:

game_data = LOAD 'game_data.csv'  USING  PigStorage(',') AS (player:chararray, game:chararray,  score:long);
game_data_grp_by_game = GROUP game_data BY game;
game_kpis = FOREACH game_data_grp_by_game 
 ord_game_data_by_score = ORDER game_data BY score DESC;
 max_score_record = LIMIT ord_game_data_by_score 1;
 GENERATE group AS game, FLATTEN(max_score_record.player) AS player_name, FLATTEN(max_score_record.score) AS score; 
;

输出:DUMP game_kpis:

(mario,jon,2345)
(minesweeper,lisa,900)

【讨论】:

为什么在这种情况下使用 FLATTEN? @MeetuAgarwal : max_score_record.player 和 max_score_record.score 是我们需要 FLATTEN 来获取记录值的包。尝试从上面的sn-p中去掉FLATTEN,你就会明白FLATTEN的必要性了。

以上是关于Apache Pig GROUP BY ,ORDER BY的主要内容,如果未能解决你的问题,请参考以下文章

如果存在多个值,Apache Pig Group by 和过滤器?

为啥 DISTINCT 在 Pig 中比 GROUP BY/FOREACH 快

Pig 脚本在 group by 语句中挂起

PIG Group by 避免包

如何优化 PIG latin 中的 group by 语句?

使用 group by 和 MAX 函数的 Pig Latin 查询