Imaginemos que tenemos un fichero score.txt con las puntuaciones de un salón de juego.
La estructura es sencilla: fecha del juego, nombre jugador y puntuación:
01-11-2012 Maria 11
01-11-2012 Pablo 9
01-11-2012 Angel 3
23-11-2012 Pablo 22
23-11-2012 Maria 15
15-12-2012 Pablo 32
15-12-2012 Maria 47
15-12-2012 Angel 13
01-01-2013 Pablo 2
01-01-2013 Maria 3
01-01-2013 Angel 32
A partir de estos datos queremos sacar la suma total de puntuaciones de cada usuario.
Las siguientes líneas van a representar los pares (key, value) que recibe el map teniendo en cuenta que las key son el offset de la línea (en bytes), y los value son la línea de texto entera.:
(0, 01-11-2012 Maria 11)
(22, 01-11-2012 Pablo 9)
(45, 01-11-2012 Angel 3)
(65, 23-11-2012 Pablo 22)
(86, 23-11-2012 Maria 15)
(110, 15-12-2012 Pablo 32)
(134, 15-12-2012 Maria 47)
(158, 15-12-2012 Angel 13)
(182, 01-01-2013 Pablo 2)
(205, 01-01-2013 Maria 3)
(225, 01-01-2013 Angel 32)
La función map lo que hará entonces será tratar cada línea recogiendo sólo la información que nos interesa y omitiendo el resto, para finalmente emitir para cada línea un par key/value con el nombre del jugador como key y la puntuación como value:
(Maria, 11)
(Pablo, 9)
(Angel, 3)
(Pablo, 22)
(Maria, 15)
(Pablo, 32)
(Maria, 47)
(Angel, 13)
(Pablo, 2)
(Maria, 3)
(Angel, 32)
Esta salida del map va a ser tratada a continuación por el Shuffle and Short antes de enviar los datos a la función reduce. En esta fase las key se van a ordenar y los value se van a agrupar por cada key, y el resultado será la entrada de la función reduce, quedando de la siguiente forma:
(Angel, [3, 13, 32])
(Maria, [11, 15, 47, 3])
(Pablo, [9, 22, 32, 2])
Así que la función reduce va a recibir como entrada cada una de estas líneas, siendo una key y por cada key una lista de value. Por cada línea el reduce emitirá la suma de las puntuaciones de cada usuario:
(Angel, 48)
(Maria, 76)
(Pablo, 65)
![]() |
Flujo de Ejemplo de MapReduce |
Genial!
ResponderEliminarFácil y sencillo para empezar a entenderlo...
ResponderEliminarGracias!
Hola Elena, gracias por tu blog
ResponderEliminar¿tienes algún ejemplo MapReduce como este, pero en el que se aprecie como junta los datos de los distintos DataNodes? Bastaría un ejemplo simplemente con 2 nodos
Salu2
excelente explicacion, muchas gracias!!
ResponderEliminar