MapReduce Kmeans实现出现的reduce函数不执行的问题

reduce函数没有执行的原因查了2个多小时。。。。。。。。。。
最后发现自己的WXKmeansData类继承了WritableComparable,并且定义了空参构造方法,也定义了带参构造方法,但是类变量没有显式的初始化,这就导致了一个问题,Text类实例的变量默认初始化会变成null,然后reduce函数执行过程中,会有一个java的反射函数得到目前在执行的WXKmeansData值,会调用WXKmeansData的空参构造方法(idea告诉你并没有被用过,,,,),然后因为是null,无法执行reduce函数

实际上Text类的空参构造方法也赋值了,并不是默认的null

所以,应该写成new Text()

以后谨记,如果不是Java默认的一些数据类型,实例变量一定不能直接留null,初始化的时候一定要小心点
善用debug,对于java的反射机制,有时候只能通过debug才能看到

发表评论

电子邮件地址不会被公开。