#python #hadoop #mrjob
#python #hadoop #mrjob
Вопрос:
Я написал простой код кластеризации k-средних для Hadoop (две отдельные программы — mapper и reducer). Код работает над небольшим набором данных из 2d точек в моем локальном поле. Он написан на Python, и я планирую использовать Streaming API.
После каждого запуска mapper и reducer генерируются новые центры. Эти центры являются входными данными для следующей итерации.
Основываясь на предложениях, я использовал mrjob, задание python, которое подходит для нескольких шагов,
def steps(self):
return [self.mr(mapper=self.anything,
combiner=self.anything,
reducer=self.anything)]
Это всего лишь одна итерация, и, пожалуйста, подскажите мне какой-либо способ обратной связи с mapper после создания новых центров. я имел в виду, что, как вы видите на последнем шаге («редуктор»), будут сгенерированы новые центры, и теперь пришло время снова отправить его обратно в mapper (первый шаг), чтобы вычислить новые расстояния с новыми центрами и так далее, пока удовлетворенные значения не сойдутся.
(пожалуйста, не говорите мне о Mahout, spark или любой другой реализации, я о них знаю.)
Комментарии:
1. Существует отличный пошаговый (с кодом) для выполнения именно этого, который я видел на прошлой неделе: classes.cs.uchicago.edu/archive/2013/spring/12300-1/labs/lab3
Ответ №1:
При запуске K-Means для остановки выполнения мы обычно определяем количество итераций или пороговое расстояние. В этом мы можем захотеть написать цепочку map reduce для количества итераций. Запишите выходные данные центроидов кластера во временный файл и передайте его следующему картографу. Сделайте это раз, равный вашим пороговым значениям.