MapReduce ist ein Muster, das aus funktionalen Programmiersprachen entlehnt ist. In einigen Szenarien kann es den Code erheblich vereinfachen. Schauen wir uns zunächst an, was MapReduce ist:
MapReduce ist eine von Google vorgeschlagene Softwarearchitektur für parallele Operationen an großen Datensätzen (größer als 1 TB). Die Konzepte „Map“ und „Reduce“ und ihre Hauptideen sind aus funktionalen Programmiersprachen entlehnt, ebenso wie Funktionen, die aus Vektorprogrammiersprachen entlehnt sind.
Die aktuelle Softwareimplementierung besteht darin, eine Map-Funktion anzugeben, um einen Satz von Schlüssel-Wert-Paaren einem neuen Satz von Schlüssel-Wert-Paaren zuzuordnen, und eine gleichzeitige Reduzierfunktion anzugeben, um sicherzustellen, dass alle zugeordneten Schlüsselwerte Jeder sind Paar teilt sich den gleichen Schlüsselsatz.
Um es einfach auszudrücken: MapReduce zerlegt das zu verarbeitende Problem in zwei Teile: Map und Reduce. Die zu verarbeitenden Daten werden als Sequenz behandelt, und die Daten in jeder Sequenz werden über die Map-Funktion berechnet und dann über die Reduce-Funktion zum Endergebnis aggregiert.
Im Folgenden wird der Mapreduce-Modus verwendet, um ein einfaches Programm zu implementieren, das die Anzahl der Wortvorkommen im Protokoll zählt:
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()