我正在尝试学习将 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
,它起作用的原因是矩阵按列存储在 input.txt 中,相应的向量值位于行尾。
因此,以下矩阵和向量:
表示为 input.txt 为:
简而言之,我将如何更自然地将矩阵和向量存储在单独的文件中并将它们都传递给 MRJob?