我的mapper类中的hadoop nullpointerexception

a6b3iqyw  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(314)

请帮助:
在我的mapper类中,我有一个示例变量 protected transient HashMap<String, Double> _map = null; 我在我的系统中初始化了这个变量 setup(Context context) 方法,也是 _map 由从 SequenceFile .
设置方法:

@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` 变量但a `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 ,到目前为止,我还不知道为什么会这样,这里被封锁了。
有办法解决这个问题还是解决办法?谢谢!

jfewjypa

jfewjypa1#

我猜文件没有正确加载/找到。作为旁白,我将使用一个计数器(group=“error”,name=“ioexception”)来计算setup()方法中抛出ioexception的次数。从反报告中很容易看出这一点:

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

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

相关问题