Я пытаюсь научиться использовать Yelp Python API для MapReduce, 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()
Этот код запускается ./ matrix.py
Итак, следующие матрица и вектор:
представлены как input.txt как:
Короче говоря, как мне более естественно хранить матрицу и вектор в отдельных файлах и передавать их в MRJob?