Несколько входов с MRJob

Я пытаюсь научиться использовать 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 по столбцам, с соответствующим значением вектора в конце строки.

Итак, следующие матрица и вектор:

enter image description here

представлены как input.txt как:

enter image description here

Короче говоря, как мне более естественно хранить матрицу и вектор в отдельных файлах и передавать их в MRJob?

7
задан P-Gn 24 July 2017 в 17:12
поделиться