플레이어 아이디가있는 게임이 있다고 가정 해 봅시다. 각 id는 여러 개의 문자 이름 (playerNames)을 가질 수 있으며 각 이름마다 점수가 있습니다. playerName 당 모든 점수를 합산하고 ID 당 플레이어 이름 당 백분율 점수를 계산하고 싶습니다.돼지 그룹 결과 내에서 루핑하기
그래서, 예를 들면 :
id playerName playerScore 01 Test 45 01 Test2 15 02 Joe 100
것 출력
id {(playerName, playerScore, percentScore)} 01 {(Test, 45, .75), (Test2, 15, .25)} 02 {(Joe, 100, 1.0)}여기
내가했던 방법 : 현재
data = LOAD 'someData.data' AS (id:int, playerName:chararray, playerScore:int);
grouped = GROUP data BY id;
withSummedScore = FOREACH grouped GENERATE SUM(data.playerScore) AS summedPlayerScore, FLATTEN(data);
withPercentScore = FOREACH withSummedScore GENERATE data::id AS id, data::playerName AS playerName, (playerScore/summedPlayerScore) AS percentScore;
percentScoreIdroup = GROUP withPercentScore By id;
을, 나는 문에 의해 2 GROUP이 작업을 수행하고, 그들이 둘 다 필요하다면, 또는 이것을 할 수있는보다 효율적인 방법이 있는지 궁금했습니다. 이것을 단일 GROUP BY로 줄일 수 있습니까? 또는 튜플 백을 반복하고 데이터를 병합하지 않고 percentScore를 모두 추가 할 수있는 방법이 있습니까?
감사합니다. TC1에게 감사드립니다. – Newtang