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 快