Estoy tratando de aprender a utilizar la API de Python de Yelp para MapReduce, MRJob. Su simple ejemplo de contador de palabras tiene sentido, pero tengo curiosidad por saber cómo manejar una aplicación que involucra múltiples entradas. Por ejemplo, en lugar de simplemente contar las palabras en un documento, multiplicar un vector por una matriz. Se me ocurrió esta solución, que funciona, pero se siente tonta:Entradas múltiples con MRJob
class MatrixVectMultiplyTast(MRJob):
def multiply(self,key,line):
line = map(float,line.split(" "))
v,col = line[-1],line[:-1]
for i in xrange(len(col)):
yield i,col[i]*v
def sum(self,i,occurrences):
yield i,sum(occurrences)
def steps(self):
return [self.mr (self.multiply,self.sum),]
if __name__=="__main__":
MatrixVectMultiplyTast.run()
Este código se ejecuta ./matrix.py < input.txt
y la razón en que funciona es que la matriz almacenada en entrada.txt por columnas, con el valor correspondiente en el vector final de la línea.
Por lo tanto, la siguiente matriz y el vector:
se representan como entrada.txt como:
En resumen, ¿cómo hago para almacenar la matriz y vector de forma más natural en archivos separados y pasarlos a ambos en MRJob?