title: Error: java.io.IOException: wrong value class: class org.apache.hadoop.io.Text is not class Myclass
body: <p>I have my mapper and reducers as follows. But I am getting some kind of strange exception.
  I can't figure out why is it throwing such kind of exception. </p>
  
  <pre><code>public static class MyMapper implements Mapper&lt;LongWritable, Text, Text, Info&gt; {
  
      @Override
      public void map(LongWritable key, Text value,
          OutputCollector&lt;Text, Info&gt; output, Reporter reporter)
          throws IOException {
          Text text = new Text("someText")
              //process 
          output.collect(text, infoObjeject);
      }
  
  }
  
  public static class MyReducer implements Reducer&lt;Text, Info, Text, Text&gt; {
  
      @Override
      public void reduce(Text key, Iterator&lt;Info&gt; values,
          OutputCollector&lt;Text, Text&gt; output, Reporter reporter)
          throws IOException {
          String value = "xyz" //derived in some way
          //process
          output.collect(key, new Text(value)); //exception occurs at this line
      }
  
  }
  
  System.out.println("Starting v14 ");
  JobConf conf = new JobConf(RouteBuilderJob.class);
  conf.setJobName("xyz");
  
  String jarLocation =ClassUtil.findContainingJar(getClass());
  
  System.out.println("path of jar file = " + jarLocation);
  
  conf.setJarByClass(RouteBuilderJob.class);
  
  conf.setMapOutputKeyClass(Text.class);
  conf.setMapOutputValueClass(Info.class);
  
  conf.setOutputKeyClass(Text.class);
  conf.setOutputValueClass(Text.class);
  
  //am i missing something here???
  
  conf.setMapperClass(RouteBuilderJob.RouteMapper.class);
  conf.setCombinerClass(RouteBuilderJob.RouteReducer.class);
  conf.setReducerClass(RouteBuilderJob.RouteReducer.class);
  
  
  conf.setInputFormat(TextInputFormat.class);
  conf.setOutputFormat(TextOutputFormat.class);
  
  FileInputFormat.setInputPaths(conf, new Path(args[0]));
  FileOutputFormat.setOutputPath(conf, new Path(args[1]));
  
  JobClient.runJob(conf);
  </code></pre>
  
  <p>I am getting an exception:</p>
  
  <pre><code>Error: java.io.IOException: wrong value class: class org.apache.hadoop.io.Text is not class com.xyz.mypackage.Info
  at org.apache.hadoop.mapred.IFile$Writer.append(IFile.java:199)
  at org.apache.hadoop.mapred.Task$CombineOutputCollector.collect(Task.java:1307)
  at com.xyz.mypackage.job.MyJob$RouteReducer.reduce(MyJob.java:156)
  at com.xyz.mypackage.job.MyJob$RouteReducer.reduce(MyJob.java:1)
  </code></pre>
  
  <p>Internally info object (which implements <code>Writable</code>) is serialized using <code>Text</code></p>
  
  <pre><code>@Override
  public void write(DataOutput out) throws IOException {
      Gson gson = new Gson();
      String searlizedStr = gson.toJson(this);
      Text.writeString(out, searlizedStr);
  }
  
  @Override
  public void readFields(DataInput in) throws IOException {
      String s = Text.readString(in);
      Gson gson = new Gson();
      JsonReader jsonReader = new JsonReader(new StringReader(s));
      jsonReader.setLenient(true);
  
  Info info = gson.fromJson(jsonReader, Info.class);
      //set fields using this.somefield = info.getsomefield() 
  }
  </code></pre>