Duda MapReduce

richmonde

Buenas!

Me están preguntando esto en una pregunta para saber si esta afirmación es cierta, o falsa.

"En el modelo MapReduce, todas las funciones de reducción son combinables." (Contexto, BBDD NoSQL)

Honestamente, no encuentro nada que afirme esto categórica y rotundamente, pero no soy un experto en la materia, sinceramente.

Alguien puede iluminarme?

Zerokkk

Hombre a ver... en este contexto determinado no te sé responder con toda certeza, pero así a priori te diría que la respuesta es no.

todas las funciones de reducción son combinables

Esta frase nos dice que las funciones que se encargan de la reducción, se pueden combinar. ¿Qué sentido tiene esto? Una función de reducción en el modelo MapReduce es, esencialmente, una forma de crear un dato a partir de un conjunto de datos. Un agregado, básicamente. Esta imagen de los docs de MongoDB lo explica bastante bien:

Aquí vemos un MapReduce muy típico, el de mapear ints y reducirlos con una suma. Pero desde una perspectiva más general, se ha de tener en cuenta:

  1. Qué dato (y en qué formato) devolver en la función de mapeado.
  2. De qué forma se quiere procesar los distintos valores del array para convertirlos en un agregado.

No es lo mismo que un mapeado te devuelva un array de números, que una matriz, un objeto... y por supuesto, la reducción también puede variar: puede ser una suma, una concatenación de distintos arrays, concatenación de strings, un hashmap de claves-valor...

He aquí un ejemplo de código mío donde se puede ver un MapReduce (en JS/TS, pero el paradigma es el mismo) que funciona de forma sustancialmente distinta a ese ejemplo clásico, y que para nada sería combinable con él:

Explicación

Mientras que en este ejemplo mi función de reducción se podría combinar con un mapeado simple que devuelva strings (y así las concatene), no funcionaría si reicibiéramos un array de números y quisiéramos sumarlos, por ejemplo. Por tanto, no podemos afirmar que es "combinable" como dice ahí.

Yo diría que la respuesta es no, y si es un "sí", entonces me encantaría que compartieses por aquí la explicación de quien hizo la pregunta, porque ineludiblemente estará mal planteada, y me atrevo a aseverar este punto.

Saludos.

1 1 respuesta
richmonde

#2 Lo primero de todo, te mereces un 10 con la explicación.

Sobre lo del Si o No, despues de comentarlo con varios, y justo con tu ejemplo:

#2Zerokkk:

No es lo mismo que un mapeado te devuelva un array de números, que una matriz, un objeto... y por supuesto, la reducción también puede variar: puede ser una suma, una concatenación de distintos arrays, concatenación de strings, un hashmap de claves-valor...

Llegue a la conclusión que la respuesta, o afirmación, es falsa. Es decir, una función de reducción es solo combinable si lo que se calcula y devuelve, es del mismo tipo, cualquier otro caso, requiere una función distinta.

Aquí es donde lo clavas.

#2Zerokkk:

Mientras que en este ejemplo mi función de reducción se podría combinar con un mapeado simple que devuelva strings (y así las concatene), no funcionaría si reicibiéramos un array de números y quisiéramos sumarlos, por ejemplo. Por tanto, no podemos afirmar que es "combinable" como dice ahí.

Muchísimas gracias!

PD: Lo que me he dado cuenta, es que sobre MapReduce hay muy muy muy poca documentación, ejemplos y demás (fácilmente entendibles).

Quien fuese que planteo esto, claramente o bien quiere ser el/la unico/a que sepa esto, o directamente, solo lo usa peter... porque tela... xD

1 2 respuestas
Zerokkk

#3 Hombre realmente el modelo MapReduce está genial, eso de que se usa poco... no te creas. Para crear agregados me parece muchísimo mejor que andar anidando for's, al menos en lenguajes de programación convencionales. En el contexto de las BBDDs... pues no sé, ahí sí que no le veo tanta gracia porque yo al menos soy muy dado de hacer toda la business logic y proceso de datos a nivel de código de backend y no a nivel de BBDD.

Me alegro de que te sirviera la explicación!

HeXaN
#3richmonde:

Quien fuese que planteo esto, claramente o bien quiere ser el/la unico/a que sepa esto, o directamente, solo lo usa peter... porque tela... xD

Se usa a diario en millones de sitios. Todo lo que sea big data lo usa (Hadoop y Spark fundamentalmente) y hoy día el big data está en todos lados.

Usuarios habituales

  • HeXaN
  • Zerokkk
  • richmonde