2013年7月26日星期五

Hadoop sorting error java.lang.NumberFormatException: For input string: "" how to solve?

?This post last edited by the sen_lin8350 on 2013-05-14 11:55:16 import java.io.IOException;
/ / import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;

public class Sort {
public static class Map extends Mapper {
private static IntWritable data = new IntWritable ();
public void map (Object key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString ();
System.out.println (line);
if (line! = "") {
data.set (Integer.parseInt (line));
context.write (data, new IntWritable (1));
}
}
}

public static class Reduce extends Reducer {
private static IntWritable linenum = new IntWritable (1);

public void reduce (IntWritable key, Iterable values, Context context) throws IOException, InterruptedException {
for (IntWritable val: values) {
context.write (linenum, key);
linenum = new IntWritable (linenum.get () +1);
}
}
}
public static void main (String [] args) throws Exception {
Configuration conf = new Configuration ();
String [] otherArgs = new GenericOptionsParser (conf, args). getRemainingArgs ();
if (otherArgs.length! = 2) {
System.err.println ("Usage: wordcount ");
System.exit (2);
}

Job job = new Job (conf, "Sort");
job.setJarByClass (Sort.class);
job.setMapperClass (Map.class);
job.setReducerClass (Reduce.class);
job.setOutputKeyClass (IntWritable.class);
job.setOutputValueClass (IntWritable.class);

FileInputFormat.addInputPath (job, new Path (otherArgs [0]));
FileOutputFormat.setOutputPath (job, new Path (otherArgs [1]));
System.exit (job.waitForCompletion (true)? 0: 1);

}
}


13/05/14 11:45:36 WARN mapred.LocalJobRunner: job_local_0001
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString (NumberFormatException.java: 65)
at java.lang.Integer.parseInt (Integer.java: 493)
at java.lang.Integer.parseInt (Integer.java: 514)
at Sort $ Map.map (Sort.java: 23)
at Sort $ Map.map (Sort.java: 1)
at org.apache.hadoop.mapreduce.Mapper.run (Mapper.java: 144)
at org.apache.hadoop.mapred.MapTask.runNewMapper (MapTask.java: 621)
at org.apache.hadoop.mapred.MapTask.run (MapTask.java: 305)
at org.apache.hadoop.mapred.LocalJobRunner $ Job.run (LocalJobRunner.java: 177)
13/05/14 11:45:37 INFO mapred.JobClient: map 0% reduce 0%
13/05/14 11:45:37 INFO mapred.JobClient: Job complete: job_local_0001
13/05/14 11:45:37 INFO mapred.JobClient: Counters: 0

data:
1) file1:
2
32
654
32
15
756
65223
2) file2
5956
22
650
92
3) file3:
26
54
6


------ Solution ---------------------------------- ----------
?This post last edited by the tntzbzc on 2013-05-14 12:04:57 other code did not see
but found a manifest error
JAVA string comparison can not use == or! =, into the equals method
 
public void map (Object key, Text value, Context context)
throws IOException, InterruptedException { String line = value.toString (); System.out.println (line); if (! line.equals ("")) {/ / JAVA string comparisons can not use == or! =, into the equals method
data.set (Integer.parseInt (line)); context.write (data, new IntWritable (1)); }
}

------ For reference only ---------------------------------- -----
can thank you!

没有评论:

发表评论