我打算为kmeans算法编写一个mapper和reducer,我认为最好的做法是将距离计算器放在mapper中并发送到reducer,其中cluster id为关键,row的坐标为value。在reducer中,将执行更新质心。我是用python写的。
如您所知,我必须使用Hadoop流式传输来在STDIN
和STOUT
之间传输数据。根据我的知识,当我们print (key + "\t"+value)
时,它将被发送到reducer。 Reducer将接收数据并计算新的质心,但是当我们打印新的质心时,我认为它不会将它们发送给mapper来计算新的簇,它只是将它发送到STDOUT
,如你所知,kmeans是一个迭代的算法。所以,我的问题是Hadoop流是否会遭受迭代程序的困扰,我们应该使用MRJOB
进行迭代程序?