MapReduce 모드를 구현하는 Python의 예

高洛峰
풀어 주다: 2016-11-21 14:45:07
원래의
1566명이 탐색했습니다.

MapReduce는 함수형 프로그래밍 언어에서 차용한 패턴으로, 일부 시나리오에서는 코드를 크게 단순화할 수 있습니다. 먼저 MapReduce가 무엇인지 살펴보겠습니다.

MapReduce는 Google이 대규모 데이터 세트(1TB 이상)에 대한 병렬 작업을 위해 제안한 소프트웨어 아키텍처입니다. "Map" 및 "Reduce"라는 개념과 주요 아이디어는 함수형 프로그래밍 언어뿐만 아니라 벡터 프로그래밍 언어에서도 가져온 기능입니다.
현재 소프트웨어 구현은 키-값 쌍 세트를 새로운 키-값 쌍 세트로 매핑하는 Map 함수를 지정하고, 매핑된 모든 키 값이 각각이 되도록 동시 Reduce 함수를 지정하는 것입니다. 쌍은 동일한 키 세트를 공유합니다.
간단히 말하면 MapReduce는 처리할 문제를 Map과 Reduce의 두 부분으로 분해합니다. 처리할 데이터는 시퀀스로 처리되며, 각 시퀀스의 데이터는 Map 함수를 통해 계산된 후 Reduce 함수를 통해 최종 결과로 집계됩니다.

다음은 mapreduce 모드를 사용하여 로그에서 단어 발생 횟수를 계산하는 간단한 프로그램을 구현합니다.

from functools import reduce
from multiprocessing import Pool
from collections import Counter

def read_inputs(file):
    for line in file:
        line = line.strip()
        yield line.split()

def count(file_name):
    file = open(file_name)
    lines = read_inputs(file)
    c = Counter()
    for words in lines:
        for word in words:
            c[word] += 1
    return c

def do_task():
    job_list = ['log.txt'] * 10000
    pool = Pool(8)
    return reduce(lambda x, y: x+y, pool.map(count, job_list))

if __name__ == "__main__":
    rv = do_task()
로그인 후 복사


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿