Java Hadoop Reduce方法中的空指针异常?

Java Hadoop Reduce方法中的空指针异常?,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我正在构建一个反向索引,当前在使用context.write时,reduce中出现了一个空指针异常。有人知道为什么吗?我认为这与序列化有关,因为我以前从未这样做过?当我打印出h时也会发生错误。关于序列化,我可以直接发现两件事,而无需stacktrace: HMapValue需要一个默认构造函数,没有它Hadoop无法创建它 在默认构造函数中,您需要正确初始化ArrayListWritable(不为null,并且需要setClass方法来正确反序列化) 原来是因为我对数据集进行了两次迭代(行int

我正在构建一个反向索引,当前在使用context.write时,reduce中出现了一个空指针异常。有人知道为什么吗?我认为这与序列化有关,因为我以前从未这样做过?当我打印出h时也会发生错误。

关于序列化,我可以直接发现两件事,而无需stacktrace:

  • HMapValue需要一个默认构造函数,没有它Hadoop无法创建它
  • 在默认构造函数中,您需要正确初始化
    ArrayListWritable
    (不为null,并且需要
    setClass
    方法来正确反序列化)

  • 原来是因为我对数据集进行了两次迭代(行
    intdf=Iterables.size(value);
    欺骗了我)。迭代器没有重置,因此reduce的主块没有运行,最后我遇到了一个空指针,因为我试图访问甚至没有初始化的数据。

    如果您可以为问题添加stacktrace,那就太好了。@ThomasJungblut我已经按照您的建议修改了代码,而不是setClass方法。我可以在哪里重写这是从?为什么要编辑以删除stacktrace和代码?@vefthym似乎我给出的示例与问题的实际原因无关。如果愿意,我可以将相关代码放在其中以简化说明?