Tôi đang cố gắng tìm hiểu cách sử dụng API Python của Yelp cho MapReduce, MRJob. Ví dụ truy cập từ đơn giản của chúng có ý nghĩa, nhưng tôi tò mò về cách mà một người sẽ xử lý một ứng dụng liên quan đến nhiều đầu vào. Ví dụ, thay vì chỉ đếm các từ trong một tài liệu, nhân một véc tơ với một ma trận. Tôi đã đưa ra giải pháp này, mà chức năng, nhưng cảm thấy ngớ ngẩn:Nhiều đầu vào với 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()
Mã này được chạy ./matrix.py < input.txt
và lý do nó hoạt động là ma trận lưu trữ trong INPUT.TXT bởi cột, với giá trị vector tương ứng ở cuối dòng.
Vì vậy, ma trận và vectơ sau:
được biểu diễn dưới dạng INPUT.TXT như:
Nói tóm lại, làm thế nào tôi sẽ đi về lưu trữ ma trận và vector tự nhiên hơn trong các tập tin riêng biệt và đưa chúng vào MRJob?