반응형
코드는 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 |