0

Cygwinを介してHadoopを使用してMapreduceジョブを実行しています。次のNumberFormatExceptionエラーが発生します...try&catchがエラーをバイパスしていると思うので、try&catch以外でこれを修正する方法はありますが、期待する結果を得ることができません。

エラー:

    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)

これが私のマッパーとリデュースです。

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);
    }


}

これが私のテキストファイルのサンプルです。

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

出力ファイルは

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

しかし、try&catchを使用して...エラーを停止します..私は..を取得しているだけです。

1   2,7,|0|BLACK|NULL
2   |1|GRAY|1
7   |1|GRAY|1
4

2 に答える 2

0
java.lang.NumberFormatException: For input string: "MAX"

コードでStringをint値に変換しようとしています。ジョブを呼び出す前に、設定している値がintであることを確認してください。

于 2012-07-19T21:38:06.463 に答える
0

入力ファイルでMAXをInteger.MAX_VALUEに変更できますか?例えば:

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

出力ファイルは新しい値を反映している必要があります。

于 2012-07-19T22:15:49.287 に答える