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