1

我对 MapReduce 比较陌生,我想到了以下问题:如何在 MapReduce 中计算完整(即非稀疏)距离矩阵?

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

到目前为止我所做的是

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

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

任何人都可以启发我吗?

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

  • Map 接收其块并评估这些点之间的距离,而不预先分配 NxN 矩阵,但预先分配 Nx3 矩阵(点 A 中的第一个 col,第二个 col 是 Point B,第三个 col 是 dist(A,B))
  • Reducer 预先分配一个完全用零填充的 NxN 矩阵。现在填充由 Map 计算的距离(块间),然后填充空隙(即块内距离,仍然为零的元素)

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

4

1 回答 1

0

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

于 2016-02-09T20:53:04.383 回答