Estoy algo confundido con el estado actual del soporte mapreduce en GAE. De acuerdo con los documentos http://code.google.com/p/appengine-mapreduce/, la fase de reducción aún no se admite, pero en la descripción de la sesión de E/S 2011 (http://www.youtube.com/watch?v=EIxelKcyCC0) está escrito "Ahora es posible ejecutar trabajos completos de reducción de mapas en App Engine". Me pregunto si puedo usar mapreduce en esta tarea:Ejemplo de contador simple usando mapreduce en Google App Engine
Lo que quiero hacer:
Tengo modelo de coche con campo color:
class Car(db.Model):
color = db.StringProperty()
Quiero correr MapReduce (de de vez en cuando, cron-defined) que puede calcular cuántos automóviles hay en cada color y almacenar este resultado en el almacén de datos. Parece un trabajo bien adaptado para mapreduce (pero si me equivoco, corrígeme), el "mapa" de fase producirá pares (, 1) para cada entidad del coche, y la fase "reducir" debería fusionar estos datos por el color_name que me da los resultados esperados . Resultado final quiero llegar son entidades con los datos calculados almacenados en el almacén de datos, algo así:
class CarsByColor(db.Model):
color_name = db.StringProperty()
cars_num = db.IntegerProperty()
Problema: No sé cómo implementar esto en appengine ... El vídeo muestra ejemplos con un mapa definido y funciones de reducción, pero parecen ser ejemplos muy generales no relacionados con el almacén de datos. Todos los demás ejemplos que encontré están usando una función para procesar los datos de DatastoreInputReader, pero parecen ser solo la fase de "mapa", no hay ningún ejemplo de cómo hacer el "reducir" (y cómo almacenar reducir los resultados en el Almacén de datos).