MapReduce

时间:2016-01-01 21:36:18

标签: matlab parallel-processing mapreduce distance-matrix

我对MapReduce相对较新,我想到了以下问题:如何在MapReduce中计算出一个完整的(即非稀疏的)距离矩阵?

我有一个包含N个实例的2D数据集,我必须评估这些点之间的所有可能距离并将它们存储在矩阵中。

到目前为止我做的是

  • 让Map检索它们的块,这些点之间的eval距离:得到的矩阵将是一个NxN矩阵,有一些距离和一些零。
  • Reduce将连接(求和)这样的矩阵,然后填充空隙(即块内距离,仍然为零的元素)

我认为这不是很有效(特别是从记忆的角度来看)。

任何人都可以启发我吗?

更新:我在上面的代码中进行了一些优化。现在

  • Map接收其块并在不预先分配NxN矩阵的情况下评估这些点之间的距离,但是预先分配Nx3矩阵(A点中的第1列,第2列是B点,第3列是dist(A,B))< / LI>
  • Reducer预分配一个完全用零填充的NxN矩阵。现在填充由Map计算的距离(块间),然后填充空隙(即块内距离,静止零元素)

毫无疑问,一个更好的解决方案,因为Mappers不需要构建整个NxN矩阵,但是,我认为它可以做得更好。

1 个答案:

答案 0 :(得分:0)

我就是这样做的:Map任务只是评估给定实例j和所有其他实例之间的距离。 Reducer在写入磁盘的向量中连接这些距离。这样的记录确实是矩阵的j行。对所有实例都进行此操作,然后将写在磁盘上的所有记录连接在一起。