简体   繁体   中英

NumberFormatException Error

I am running a Mapreduce Job using Hadoop through Cygwin. I am getting the following NumberFormatException Error... any idea how i can fix this outside of try & catch because i think the try & catch is bypassing the error but not allowing me to get the results i expect.

Error:

    12/07/19 17:10:31 INFO mapred.JobClient: Task Id : attempt_201207190234_0010_m_000000_2, Status : FAILED
java.lang.NumberFormatException: For input string: "MAX"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Integer.parseInt(Integer.java:449)
        at java.lang.Integer.parseInt(Integer.java:499)
        at Node.<init>(Node.java:48)
        at GraphJob$SearchMapper.map(GraphJob.java:18)

Here is my Mapper and Reduce..

public class GraphJob {

public static class SearchMapper extends Mapper<Object, Text, Text, Text>{
    public void map(Object key, Text value, Context context)
                    throws IOException, InterruptedException{
        try{
        Node inNode = new Node(value.toString());
        if(inNode.getColor() == Node.Color.GRAY) {
            for(String neighbor : inNode.getEdges()) {
                Node adjacentNode = new Node();

                adjacentNode.setId(neighbor);
                int distance = inNode.getDistance() + 1;
                adjacentNode.setDistance(distance);
                if (distance < 2){
                    adjacentNode.setColor(Node.Color.GRAY);
                }
                else{
                    adjacentNode.setColor(Node.Color.BLACK);
                }
                adjacentNode.setParent(inNode.getId());
                context.write(new Text(adjacentNode.getId()), adjacentNode.getNodeInfo());
            }

            inNode.setColor(Node.Color.BLACK);
        }

        context.write(new Text(inNode.getId()), inNode.getNodeInfo());
        }catch(Exception e){

        }
    }
}

public static class SearchReducer extends Reducer<Text, Text, Text, Text> {
    public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {

        Node outNode = new Node();
        outNode.setId(key.toString());

        for (Text value : values) {
            Node inNode = new Node(key.toString() + "\t" + value.toString());

            if(inNode.getEdges().size() >0) {
                outNode.setEdges(inNode.getEdges());
            }
            if (inNode.getDistance() < outNode.getDistance()) {
                outNode.setDistance(inNode.getDistance());

                outNode.setParent(inNode.getParent());
            }
            if (inNode.getColor().ordinal() > outNode.getColor().ordinal()) {
                outNode.setColor(inNode.getColor());
            }
        }
        context.write(key, new Text(outNode.getNodeInfo()));

    }

}

public static void main(String[] args) throws Exception {

    Configuration conf = new Configuration();
    String[] otherargs = new GenericOptionsParser(conf, args).getRemainingArgs();
    Job job = new Job(conf, "GraphJob");
    job.setJarByClass(GraphJob.class);
    job.setMapperClass(SearchMapper.class);
    job.setReducerClass(SearchReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(Text.class);
    FileInputFormat.addInputPath(job, new Path(otherargs[0]));
    FileOutputFormat.setOutputPath(job, new Path(otherargs[1]));
    System.out.println("start the job");
    System.exit(job.waitForCompletion(true) ? 0 : 1);
    }


}

Here is a sample of my text file..

1   2,7|0|GRAY|NULL
2   3,6,8|MAX|WHITE|NULL
3   2,4,5,6,8|MAX|WHITE|NULL
4   3,5,9|MAX|WHITE|NULL
5   3,4,8|MAX|WHITE|NULL
6   2,3|MAX|WHITE|NULL
7   1,8|MAX|WHITE|NULL
8   2,3,5,7,9|MAX|WHITE|NULL
9   4,8|MAX|WHITE|NULL

Output file should be

1   2,7|0|BLACK|NULL
2   3,6,8|1|GRAY|1
7   1,8|GRAY|1
3   2,4,5,6,8|MAX|WHITE|NULL
4   3,5,9|MAX|WHITE|NULL
5   3,4,8|MAX|WHITE|NULL
6   2,3|MAX|WHITE|NULL
8   2,3,5,7,9|MAX|WHITE|NULL
9   4,8|MAX|WHITE|NULL

but with the try & catch ... to stop the error.. i am only getting ..

1   2,7,|0|BLACK|NULL
2   |1|GRAY|1
7   |1|GRAY|1
java.lang.NumberFormatException: For input string: "MAX"

You are trying to convert String to int value in your code. Before invoking the job make sure the value you are setting is int.

Can you change MAX to Integer.MAX_VALUE in your input file? eg:

1   2,7|0|GRAY|NULL
2   3,6,8|Integer.MAX_VALUE|WHITE|NULL
3   2,4,5,6,8|Integer.MAX_VALUE|WHITE|NULL
4   3,5,9|Integer.MAX_VALUE|WHITE|NULL
5   3,4,8|Integer.MAX_VALUE|WHITE|NULL
6   2,3|Integer.MAX_VALUE|WHITE|NULL
7   1,8|Integer.MAX_VALUE|WHITE|NULL
8   2,3,5,7,9|Integer.MAX_VALUE|WHITE|NULL
9   4,8|Integer.MAX_VALUE|WHITE|NULL

Your output file should reflect the new values.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM