Sto cercando di imparare a utilizzare l'API Python di Yelp per MapReduce, MRJob. Il loro semplice esempio di contatore di parole ha senso, ma sono curioso di sapere come gestire un'applicazione che coinvolge più input. Per esempio, invece di contare semplicemente le parole in un documento, moltiplicando un vettore per matrice. Sono venuto con questa soluzione, quali funzioni, ma sente stupido:Più ingressi 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()
Questo codice viene eseguito ./matrix.py < input.txt
e il motivo per cui funziona è che la matrice salvata in input.txt da colonne, con il valore del vettore corrispondente nella parte fine della linea.
Quindi, la seguente matrice e vettore:
sono rappresentati come input.txt come:
In breve, come andrei circa memorizzazione della matrice e vector più naturalmente in file separati e passandoli entrambi in MRJob?