我正试图实现一个块矩阵矢量乘法算法与hadoop根据示意图从http://i.stanford.edu/~ullman/mmds/ch5.pdf 第162页。我的矩阵是稀疏的,向量是稠密的,这正是pagerank所需要的。假设向量不适合内存。
我考虑的可能实现方式是使用compositeinputformat,基本上执行矩阵块与向量块的map-side连接,并在combiner/reducer中对最终结果块起作用的中间结果块求和。这种方法和一般的map-side连接的区别在于,我需要将矩阵的几个块与向量的一个块连接起来。我知道hadoop中map-side-join对拆分、排序等的要求,在拆分方面,我会为每个块指定一个相应的文件。在我看来,我需要修改决定哪些文件应该连接的代码,这样hadoop就不想再使用相同的名称连接来自两个路径的文件,而是根据我定义的方案。但是,我不知道这是否是一种有效的方法,也不知道这部分代码的位置。我查看了hadoop源代码,但找不到它。
我知道我可以用reduce-side连接来实现这一点,但是这里的效率非常关键,因为这个矩阵-向量乘法需要大量执行。分布式缓存是不可能的,因为向量不适合内存。
有人知道如何解决这个问题吗?
暂无答案!
目前还没有任何答案,快来回答吧!