我为 Hadoop 编写了一个简单的 k-means 聚类代码(两个独立的程序 - 映射器和化简器)。该代码正在处理我本地盒子上的一个二维点的小数据集。它是用 Python 编写的,我打算使用 Streaming API。
每次运行 mapper 和 reducer 后,都会生成新的中心。这些中心是下一次迭代的输入。
根据建议,我使用了适合多步骤的mrjob,job python,
def steps(self):
return [self.mr(mapper=self.anything,
combiner=self.anything,
reducer=self.anything)]
这只是一次迭代,请告诉我在生成新中心后如何反馈给映射器。我的意思是,正如您在最后一步(“reducer”)中看到的那样,将生成新的中心,现在是时候再次将其反馈给映射器(第一步)以计算新中心的新距离,依此类推,直到满意的收敛。
(请不要告诉我 Mahout、spark 或任何其他实现,我知道它们。)