我对 MapReduce 比较陌生,我想到了以下问题:如何在 MapReduce 中计算完整(即非稀疏)距离矩阵?
我有一个包含 N 个实例的 2D 数据集,我必须评估这些点之间的所有可能距离并将它们存储在矩阵中。
到目前为止我所做的是
- 让 Map 检索它的块,评估这些点之间的距离:生成的矩阵将是一个 NxN 矩阵,具有一些距离和一些零。
- Reduce 将连接(求和)这样的矩阵,然后填充空隙(即块内距离,仍然为零的元素)
我认为这不是很有效(特别是从记忆的角度来看)。
任何人都可以启发我吗?
更新:我在上面的代码中做了一些优化。现在
- Map 接收其块并评估这些点之间的距离,而不预先分配 NxN 矩阵,但预先分配 Nx3 矩阵(点 A 中的第一个 col,第二个 col 是 Point B,第三个 col 是 dist(A,B))
- Reducer 预先分配一个完全用零填充的 NxN 矩阵。现在填充由 Map 计算的距离(块间),然后填充空隙(即块内距离,仍然为零的元素)
毫无疑问,这是一个更好的解决方案,因为 Mappers 不需要构建整个 NxN 矩阵,但我仍然认为它可以做得更好。