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