지역 - 사람 - 점수 데이터다.
지역별로 그룹바이를 하고 점수로 랭킹을 매겨서 표시하고 싶다.
결과는 이렇다.
지역 - 사람 - 점수 - 랭킹
코딩하기도 귀찮고 쿼리쓰기 애매한 상황이다. 쿼리쓰면 윈도우 펑션 써야되겠구나.
하둡 스트리밍을 쓰면 노코드로 가능하다.
-mapper cat -reducer g.sh
g.sh
#!/bin/bash
sort -k1,1rn -k3,3rn | awk -F'\t' '{print $0"\t"arr[$1]++}'
원리는 이렇다. 하둡 스크리밍의 맵퍼는 단순 cat 이고 "지역"으로 클러스터링해서 리듀서에 보낸다. 이때 리듀서 한 개에는 여러 지역이 들어있을 수 있으나 지역으로 소팅은 되어 있다.
이 데이터를 sort를 이용하여 정렬하되, 1,3 필드에 대해 정렬한다. 사실 1번 필드 지역으로는 정렬할 필요가 없으나 3번필드 점수로 정렬하면 최종 모양이 예쁘지가 않다. awk에 의해 그룹바이 랭킹 카운트가 먹고 있으니 3번필드 점수로만 정렬해도 모양은 다르나 결과는 같다.