본문 바로가기

컴퓨터 과학/데이터베이스

Mappers and Reducers 구현 (Map Reduce Advanced - Count number of friends)

반응형
코드는 python 2를 기준으로 작성되었습니다.
 

import sys
from collections import OrderedDict

class MapReduce:
    def __init__(self):
        self.intermediate = OrderedDict()
        self.result = []
   
    

    def emitIntermediate(self, key, value):  
        self.intermediate.setdefault(key, [])     
        self.intermediate[key].append(value)

    def emit(self, value):
        self.result.append(value) 

    def execute(self, data, mapper, reducer):
        for record in data:
            mapper(record)

        for key in self.intermediate:
            reducer(key, self.intermediate[key])

        self.result.sort()
        for item in self.result: #result = [[Alice, 1], [Joe,2],['Phi,3]] 
            print "{\"key\":\""+item[0]+"\",\"value\":\"" + str(item[1]) + "\"}"

mapReducer = MapReduce()

def mapper(record):
    friend1, friend2 = record.replace('\n''').split(' ')
    mapReducer.emitIntermediate(friend1, friend2)
    mapReducer.emitIntermediate(friend2, friend1)
    
    #Start writing the Map code here

def reducer(key, list_of_values):
    mapReducer.emit((key, len(set(list_of_values)))) # 중복제거
    #Start writing the Reduce code here

if __name__ == '__main__':
  inputData = []
  for line in sys.stdin:
   inputData.append(line)

  mapReducer.execute(inputData, mapper, reducer)

 

여기서 하나 알아야하는 것은 mapper에서 작성한 방식 

여기서 확장성을 위해서라면 mapReducer를 인수로 꺼내야 하는것이 아닌가?

뭔가 상황을 복잡하게 하면 더 확장할 부분이 보인다.

반응형

'컴퓨터 과학 > 데이터베이스' 카테고리의 다른 글

HackerRank - SQL문제풀이  (0) 2023.10.06
Like와 Regexp_Like 차이  (1) 2023.10.06
Mapper 와 Reducer  (0) 2023.10.05
OLAP Aggregation  (0) 2023.10.05
Cube와 Rollup 예시  (0) 2023.10.03