2015-07-24 4 views
-1

У меня есть сумка, содержащая кортежи с именем игрока, gameName, оценка. Я сначала ГРУППА над сумкой BY игры и положил ее в другую сумку. Теперь я хочу кортежи с самым высоким счетом для каждой игры в другой сумке. Как я должен это делать?Apache Pig GROUP BY, ORDER BY

+0

Plz разделяют входные данные и экс выведенный для usecase –

+0

@MuraliRao Входной файл имеет кортежи этой формы: jon, mario, 2345 joe, minesweeper, 234 peter, mario, 112 lisa, minesweeper, 900 Я хочу, чтобы самые высокие бомбардиры для каждой игры ..mario, jon, 2345 minesweeper, lisa, 900. Это должен иметь gameName, playerName, оценка для каждой игры –

+0

, вы можете использовать вложенные для каждого, чтобы достичь того же. взгляните на предложенный ответ и сообщите мне, помогает ли это –

ответ

1

Вход:

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

Pig Сценарий:

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) 
+0

, почему в этом случае используется FLATTEN? –

+0

@MeetuAgarwal: max_score_record.player & max_score_record.score - это сумки, которые нам нужны для FLATTEN, чтобы получить рекордное значение. Попробуйте удалить FLATTEN из приведенного выше фрагмента, вы поймете необходимость FLATTEN. –