私は MapReduce に比較的慣れていないので、次の問題が頭をよぎりました: MapReduce で完全な (つまり疎ではない) 距離行列をどのように計算できますか?
N 個のインスタンスを持つ 2D データセットがあり、そのようなポイント間のすべての可能な距離を評価し、それらをマトリックスに格納する必要があります。
私がこれまでに行ったことは、
- Map にそのチャンクを取得させ、そのようなポイント間の距離を評価させます。結果のマトリックスは、いくつかの距離といくつかのゼロを含む NxN マトリックスになります。
- Reduce はそのような行列を連結 (合計) し、空白を埋めます (つまり、チャンク内距離、まだゼロの要素)。
これはあまり効率的ではないと思います (特にメモリの観点から)。
誰でも私を啓発できますか?
更新:上記のコードで少し最適化を行いました。今
- Map はそのチャンクを受け取り、NxN マトリックスを事前に割り当てずに、そのようなポイント間の距離を評価しますが、Nx3 マトリックスを事前に割り当てます (ポイント A の 1 番目の列、2 番目の列はポイント B、3 番目の列は dist(A,B) です)。
- Reducer は、完全にゼロで満たされた NxN 行列を事前に割り当てます。Map によって計算された距離 (チャンク間) を埋めてから、空隙 (つまり、チャンク内の距離、まだゼロの要素) を埋めます。
マッパーは NxN マトリックス全体を構築する必要がないため、より良いソリューションであることは間違いありませんが、それでも、より適切に実行できると思います。