问题描述
我在写kmeans算法的时候,将Mapper和Reducer函数写到一个Kmeans方法内,首先在本机上跑,结果是通过的,然后在服务器上跑,出现了无效的结果。这个让我调试了快一个下午,终于发现了问题。
问题在于我给Kmeans方法设了一个全局变量feature_num。然后仅在map的setup中重写从conf中读取了feature_num,用来表征特征数量。但是问题就在这里,如果是本机跑,那么map和reduce方法都会使用一个全局变量。而在集群下,不同的class会被拆出来单独进行作业计算,因此reduce内feature_num为null。
解决方法
办法是设定全局变量后,在map和reduce的setup中都进行赋值。