
Data Science
396
assert (set(map
_
reduce(entries, mapper, reducer)) ==
{((0, 1), -3), ((0, 0), 32)})
이런 방법은 작은 행렬에서는 크게 효과적이지 않지만, 수백만 개의 행과 수백
만 개의 열이 주어졌을 때는 꽤 효과적이다.
25.6
여담: Combiner
예리한 독자라면
mapper
들이 꽤 많은 정보를 담고 있다는 것을 발견했을 것이
다. 예를 들어 단어를 셀 때는
(word,
1)
을 전달해서 값을 모두 더하기보다 차라
리
(word,
None)
을 전달해서 단순히 리스트의 길이만 구할 수도 있었다.
하지만 그렇게 하지 않은 이유가 있다. 분산적인 환경에서는 컴퓨터와 컴퓨터
사이에서 전달되어야 하는 데이터의 양을 줄이기 위해
combiner
를 사용할 수
있기 때문이다. 예를 들어 한
mapper
컴퓨터가 ‘
data
’라는 단어를
500
번 보았을
때, 그 컴퓨터한테
500
개의
("data",
1)
을 하나의
("data",
500)
으로 합친 후 리
듀스 작업을 하는 컴퓨터에 전달하게 하는 것이 훨씬 효율적일 것이다. 이렇게
하는 것이 컴퓨터 간 데이터 전송량을 줄여 주기 때문에 전체적인 속도 또한 훨
씬 빠르다.
Reducer
를 앞에서와 같이 작성한 덕에 코드를 수정하지 않고도 ...