Hadoop NullPointerException在我的映射器类



请帮助:

在我的mapper类中,我有实例变量protected transient HashMap<String, Double> _map = null;

我在我的setup(Context context)方法中初始化了这个变量,_map也填充了从SequenceFile读取的数据。

设置emthod:

@Override
    protected void setup(Context context) throws IOException, InterruptedException 
    {       
        super.setup(context);
        Configuration conf = context.getConfiguration();
        _map = new HashMap<String, Double>();
        Path seqFilePath = new Path(conf.get("in"));
        Reader reader;
        try 
        {
            reader = new Reader(conf, Reader.file(seqFilePath));
            Text key = new Text();
            DoubleWritable value = new DoubleWritable();
            while (reader.next(key, value)) 
            {
                _map.put(key.toString().trim(), value.get());
            }
        }
        catch (IOException e) 
        {
            LOGGER.error("Can't find the input path to read: " + seqFilePath, e);
        }
    }

map()方法:

@Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException
    {
        ...
        getDiscretizationLabel(...);
        ...
    }

在我的getDiscretizationLabel(...)方法中,我试图从_map变量检索数据,但NullPointerException正在抛出:

private void getDiscretizationLabel(String attribute, String value, String category, int bin, Context context) throws IOException, InterruptedException 
    {
        ...
        min = _map.get(attribute + "_min"); // throws NullPointerException
        max = _map.get(attribute + "_max");
        ...
    }

getDiscretizationLabel(...)抛出NullPointerException,到目前为止,我无法弄清楚为什么是这样,并被阻挡在这里。

是否有解决这个问题的方法或变通方法?谢谢!

我的猜测是文件没有被正确加载/找到。顺便说一句,我会使用一个计数器(group="error", name="IOException")来计算在setup()方法中抛出IOException的次数。在计数器报告中很容易看到计数:

context.getCounter("error","IOException").increment(1); 

如果您确定没有抛出错误,则在try-catch块之前将错误写入记录器。使用错误的严重性,以便您可以确认您可以找到已记录的错误消息。

相关内容

  • 没有找到相关文章

最新更新