我正在构建一个倒排索引,当前在使用context.write时,reduce中出现了一个空指针异常。有人知道为什么吗?我想这和连载有关,因为我以前从来没有这样做过?当我打印出h时也会发生错误。
cdmah0mi1#
原来是因为我对数据集进行了两次迭代(行 int df = Iterables.size(values); 欺骗了我)。迭代器没有重置,因此reduce的主块没有运行,最后我碰到了一个空指针,因为我试图访问甚至没有初始化的数据。
int df = Iterables.size(values);
7rtdyuoh2#
在没有stacktrace的情况下,我可以直接发现两件关于序列化的事情:hmapvalue需要一个默认构造函数,没有它hadoop就不能创建它在默认构造函数中,需要初始化 ArrayListWritable 正确(不为空,需要 setClass 方法以正确反序列化。
ArrayListWritable
setClass
2条答案
按热度按时间cdmah0mi1#
原来是因为我对数据集进行了两次迭代(行
int df = Iterables.size(values);
欺骗了我)。迭代器没有重置,因此reduce的主块没有运行,最后我碰到了一个空指针,因为我试图访问甚至没有初始化的数据。7rtdyuoh2#
在没有stacktrace的情况下,我可以直接发现两件关于序列化的事情:
hmapvalue需要一个默认构造函数,没有它hadoop就不能创建它
在默认构造函数中,需要初始化
ArrayListWritable
正确(不为空,需要setClass
方法以正确反序列化。