En esencia, Map/Reduce se basa en repartir el trabajo para calcular (Map) y juntar los resultados (Reduce).
En un trabajo repartido entre varios, el resultado de los cálculos de cada trabajador (Map) es parcial, por lo que luego es necesario juntar los resultados de todos los trabajadores (Reduce) para obtener el resultado final.
Supongamos que tenemos una montaña desordenada de 3000 pares de calcetines de diferentes marcas: CK, Zara, Abanderado, UNO y NISU, y que los calcetines tienen diferentes diseños: A rayas, con topitos y lisos.
Como los trabajadores de nuevas tecnologías valemos tanto para un roto como para un descosido, nos encargan la tarea de contar cuántos calcetines de rayas tenemos de cada marca.
Ante una tarea tan larga y aburrida, se nos ocurre que, lo mejor es pedir ayuda a esos 2 amigos que te deben un favor de cuando les ayudaste con su maldita mudanza; así que ni corto ni perezoso divides la montaña en 3 cajas y les pides que se pongan a contar (Map) con los siguientes resultados:
Marca Nº con Rallas
Caja 1 CK 200
Abanderado 80
UNO 10
NISU 30
Caja 2 CK 50
Zara 600
Abanderado 90
Caja 3 CK 70
Abanderado 100
Y ahora es cuestión de juntar las cuentas de todos (Reduce) cogiendo cada uno de los colegas un trozo de la lista para dividirnos también el trabajo de sumar: (Esto parece tonto con este ejemplo pero si entre los 3000 calcetines se encontrasen 200 marcas diferentes os aseguro que también pediríais ayuda a los colegas para esto)
CK 200 CK 200
Abanderado 80 --> Abanderado 80
UNO 10 UNO 10
NISU 30 NISU 30
CK 50 --> CK 50
Zara 600 Zara 600
Abanderado 90 --> Abanderado 190
CK 70 CK 70
Abanderado 100
Y repetimos la operación de reducción; notad que, en cada paso se amplía el número de elementos que se procesan en conjunto y por lo tanto se reduce el número de grupos.
CK 200 CK 200
Abanderado 80 --> Abanderado 80
UNO 10 UNO 10
NISU 30 NISU 30
CK 50 CK 120
Zara 600 --> Zara 600
Abanderado 190 Abanderado 190
CK 70
Y después de unos pasos más llegamos al resultado definitivo una vez que no se repiten marcas de ropa en la lista (están todas "reducidas"):
CK 320 CK 320
Abanderado 80 Abanderado 270
UNO 10 --> UNO 10
NISU 30 NISU 30
Zara 600 Zara 600
Abanderado 190
Antes de acabar me gustaría remarcar ciertas propiedades de esta técnica para dejar tu armario maqueado:
- El formato de entrada y salida de la función de Reducción tienen que coincidir. Esto debe ser así puesto que la salida se usa para volverla a procesar de nuevo con la misma función.
- En caso de que se agreguen un montón de calcetines CK nuevos no es necesario recalcular los 3000 pares. Simplemente se volverían a Mapear y Reducir los calcetines de marca CK permitiendo que, una vez el trabajo gordo esté hecho, sea mucho menos costoso mantener los cálculos actualizados.
No hay comentarios:
Publicar un comentario