This was answered at http://search-hadoop.com/m/j1M3R1Mjjx31
On Fri, Aug 3, 2012 at 3:52 AM, Harit Himanshu <harit.himan...@gmail.com> wrote: > Hi, > > I face another issue, now, Here is my program > > > public static class MapClass extends Mapper<LongWritable, Text, Text, > LongWritable> { > > public void map(LongWritable key, Text value, Context context) > throws IOException, InterruptedException { > // your map code goes here > String[] fields = value.toString().split(","); > Text yearInText = new Text(); > LongWritable out = new LongWritable(); > String year = fields[1]; > String claims = fields[8]; > > if (claims.length() > 0 && (!claims.startsWith("\""))) { > yearInText.set(year.toString()); > out.set(Long.parseLong(claims)); > context.write(yearInText, out); > } > } > } > > > public static class Reduce extends Reducer<Text, LongWritable, Text, > Text> { > > public void reduce(Text key, Iterable<LongWritable> values, Context > context) throws IOException, InterruptedException { > // your reduce function goes here > Text value = new Text(); > value.set(values.toString()); > context.write(key, value); > } > } > > public int run(String args[]) throws Exception { > Job job = new Job(); > job.setJarByClass(TopKRecord.class); > > job.setMapperClass(MapClass.class); > job.setReducerClass(Reduce.class); > > FileInputFormat.setInputPaths(job, new Path(args[0])); > FileOutputFormat.setOutputPath(job, new Path(args[1])); > > job.setMapOutputValueClass(LongWritable.class); > job.setJobName("TopKRecord"); > > // job.setNumReduceTasks(0); > boolean success = job.waitForCompletion(true); > return success ? 0 : 1; > } > > public static void main(String args[]) throws Exception { > int ret = ToolRunner.run(new TopKRecord(), args); > System.exit(ret); > } > } > > When I run this in hadoop, I see the following error > > 12/08/02 15:12:59 INFO mapred.JobClient: Task Id : > attempt_201208021025_0011_m_000001_0, Status : FAILED > java.io.IOException: Type mismatch in key from map: expected > org.apache.hadoop.io.LongWritable, recieved org.apache.hadoop.io.Text > at > org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:1014) > at > org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:691) > at > org.apache.hadoop.mapreduce.TaskInputOutputContext.write(TaskInputOutputContext.java:80) > at com.hadoop.programs.TopKRecord$MapClass.map(TopKRecord.java:39) > at com.hadoop.programs.TopKRecord$MapClass.map(TopKRecord.java:26) > at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144) > at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764) > at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370) > at org.apache.hadoop.mapred.Child$4.run(Child.java:255) > at java.security.AccessController.doPrivileged(Native Method) > at javax.security.auth.Subject.doAs(Subject.java:396) > at > org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) > at org.apache.hadoop.mapred.Child.main(Child.java:249) > > I asked this question on SO, and got response that I need to > setMapOutputValue class and I tried that too (see in code above) by > following > http://hadoop.apache.org/common/docs/r0.20.2/api/org/apache/hadoop/mapreduce/Job.html#setMapOutputKeyClass%28java.lang.Class%29 > > How do I fix this? > > Thank you > + Harit -- Harsh J