Я написал простой код кластеризации k-средних для Hadoop (две отдельные программы — картограф и редьюсер). Код работает с небольшим набором данных из 2d точек в моем локальном ящике. Он написан на Python, и я планирую использовать Streaming API.
После каждого запуска картографа и редуктора генерируются новые центры. Эти центры являются входными данными для следующей итерации.
Основываясь на предложениях, я использовал mrjob, job python, который подходит для нескольких шагов,
def steps(self):
return [self.mr(mapper=self.anything,
combiner=self.anything,
reducer=self.anything)]
Это всего лишь одна итерация, и, пожалуйста, скажите мне, как можно отправить сообщение в картограф после создания новых центров. я имел в виду, что, как вы видите, на последнем шаге («редуктор») будут сгенерированы новые центры, и теперь пришло время снова передать их обратно в картограф (первый шаг), чтобы рассчитать новые расстояния с новыми центрами и так далее, пока довольные сходятся.
(пожалуйста, не говорите мне о Mahout, spark или любой другой реализации, я знаю о них.)