【发布时间】:2016-01-30 06:47:00
【问题描述】:
我为 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)]
这只是一次迭代,请告诉我在生成新中心后有什么方法可以反馈给 mapper。我的意思是,正如您在最后一步(“reducer”)中看到的那样,将生成新中心,现在是时候再次将其反馈给映射器(第一步)以计算新中心的新距离,依此类推,直到满足的收敛。
(请不要告诉我有关 Mahout、spark 或任何其他实现的信息,我知道它们。)
【问题讨论】:
-
前一周我看到了一个很棒的演练(带代码)来做到这一点:classes.cs.uchicago.edu/archive/2013/spring/12300-1/labs/lab3