Java map reduce中的Array.length引发空指针异常

Java map reduce中的Array.length引发空指针异常,java,nullpointerexception,mapreduce,reducers,Java,Nullpointerexception,Mapreduce,Reducers,这是我在mapreduce中使用的代码,并获得一个空指针异常。我通过配置传递一个变量,将其作为字符串,解析并存储在一个int数组中,然后处理它-- int[]结果; 公共无效配置(JobConf作业){ //targetPeriod=Integer.parseInt(job.get(“Predict”); 字符串[]pred=job.get(“Predict”).split(“,”); 结果=新整数[pred.length]; 对于(int i=0;i double[]ProjectedCumu

这是我在mapreduce中使用的代码,并获得一个空指针异常。我通过配置传递一个变量,将其作为字符串,解析并存储在一个int数组中,然后处理它--

int[]结果;
公共无效配置(JobConf作业){
//targetPeriod=Integer.parseInt(job.get(“Predict”);
字符串[]pred=job.get(“Predict”).split(“,”);
结果=新整数[pred.length];
对于(int i=0;i
double[]ProjectedCumulativesCoreAttargePeriod=新的double[results.length];
//参与者=新参与者(价值观,目标期);
for(int i=0;i
问题在于,抛出NPE的行上的results变量为null。现在,您应该通过在出现问题的行之前测试变量的null和/或其内容来验证这一点,然后在代码中查看原因。也许您在调用configure方法之前调用了reduce,但根据您所使用的方法很难判断e张贴

最重要的是,您需要学习调试NPE的一般技术——检查有问题的行上的变量,找到一个为null并引发异常的变量,然后跟踪代码以了解原因。相信我,您将一次又一次地遇到这些bug


你还需要提高你的搜索技巧,因为这类问题每天都会在这个网站上被问到不止一次。如果我能找到一个好的重复答案(我们通常使用的答案在我看来不太好),我将删除此答案并将此线程锁定为副本。

您以前很可能没有运行configure方法,因此
int[]调用
results.length
时,results
仍然为空。要访问其方法和变量,您必须在之前对其进行初始化,但由于错误显示空指针异常,这是因为
int[]结果
尚未初始化,因此您需要确保在获取其长度属性之前对其进行了初始化。

我认为您的变量尚未初始化,这就是引发NullPointerException的原因。

很抱歉,我可能错了,但我只在configure方法(pred.length)中获取要初始化的长度,那么我之前如何初始化它。它的长度是动态的,并且会变化…@MuthuPalaniappan我不能不看更多的代码。调用方法的顺序是什么?
  int[] results;

        public void configure(JobConf job) {
            // targetPeriod = Integer.parseInt(job.get("Predict"));
            String[] pred = job.get("Predict").split(",");
            results = new int[pred.length];

            for (int i = 0; i < pred.length; i++) {
                try {
                    results[i] = Integer.parseInt(pred[i]);
                } catch (NumberFormatException nfe) {
                }
                ;
            }




        protected void reduce(final IntWritable key, final Iterable<Text> values,
                final Context context) throws IOException, InterruptedException {

            // int targetPeriod = Integer.parseInt(predict.trim());
            String predictfin = null;
            // int targetPeriod = 10;
        "EXCEPTION HERE"---->
            double[] projectedCumulativeScoreAtTargetPeriod = new double[results.length];
            // Participant participant = new Participant(values,targetPeriod);
            for (int i = 0; i < results.length; i++) {
                Participant participant = new Participant(values, results[i]);




14/07/25 15:23:12 INFO mapred.JobClient: Task Id : attempt_201407110824_0728_r_000000_0, Status : FAILED
java.lang.NullPointerException
        at ProjectionReducer.reduce(ProjectionReducer.java:38)
        at ProjectionReducer.reduce(ProjectionReducer.java:1)
        at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:177)
        at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:649)
        at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:418)
        at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:396)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
        at org.apache.hadoop.mapred.Child.main(Child.java:249)