使用 python K-MEANS 的 Hadoop 流式传输

Hadoop streaming with python K-MEANS

我想用 hadoop map reduce 和 python 做一个简单的 k-means。

映射器获取点并将每个点映射到其最近的中心。
reducer 以中心为键,以点为值,并计算一个新的中心到点。

但是现在,我需要从 reducer 收集所有新的中心,并以某种方式将它们提供给映射器 在下一轮。

我该怎么做?我需要为每个地图任务设置一个全局中心数组。

正确的做法是什么?

有关如何对全局常量进行编码的信息,请参阅

映射器

接受

  • 数据
  • 表示中心列表的全局常量

计算

  • 每个数据实例的最近中心

发射

  • 最近的中心()和点()。

减速器

接受

  • 中心实例/坐标​​(key
  • 分(价值

计算

  • 基于集群的新中心

发射

  • 新中心

您将为 K-Means 的下一个纪元提供:

  1. 来自您初始时期的相同数据
  2. reducer 发出的中心作为全局常量

重复直到满足您的停止标准。