You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@avro.apache.org by Rohini U <ro...@gmail.com> on 2011/09/15 15:10:33 UTC

Problem running an Non Avro to Avro Job

Hi All,

I am using avro 15.3 and CDH3. I have a query in running a Non Avro to Avro
Job. My mapper is non Avro mapper and it outputs a avro data.
When I run this, I get an error saying not a Pair Schema. Does the key
always have to be a Pair Schema?

public void map(Text key, Text value,
                OutputCollector<AvroWrapper<TestPair>, NullWritable> output,
                Reporter reporter) throws IOException {
            String valueString = value.toString();
            String[] toks = valueString.split("\t");
            TestPair p = new TestPair();
            p.left = toks[0];
            p.right = toks[1];


            output.collect(new AvroWrapper<TestPair>(p),wt);
        }

 Thanks,
-Rohini

Re: Problem running an Non Avro to Avro Job

Posted by Chris Wilkes <cw...@gmail.com>.
In  org.apache.avro.mapred.HadoopMapper:

public void collect(OUT datum) throws IOException {
      if (isMapOnly) {
        // don't require a Pair for datum
      } else {
        // cast datum to a pair
     }
 }

so in your case you probably just want to set the number of reducers
to 0 to create an avro record without a Pair as the output value (you
mention "key" below btw).

Actually re-reading it looks like you are trying to make a Pair
object.  Why are you putting that inside an AvroWrapper?  Just do
  collector.collect(p)
And set your map output schema to TestPair.SCHEMA$ where SCHEMA$ =
Pair.getPairSchema(keySChema, valueSchema)

Chris

On Thu, Sep 15, 2011 at 6:10 AM, Rohini U <ro...@gmail.com> wrote:
> Hi All,
>
> I am using avro 15.3 and CDH3. I have a query in running a Non Avro to Avro
> Job. My mapper is non Avro mapper and it outputs a avro data.
> When I run this, I get an error saying not a Pair Schema. Does the key
> always have to be a Pair Schema?
>
> public void map(Text key, Text value,
>                 OutputCollector<AvroWrapper<TestPair>, NullWritable> output,
>                 Reporter reporter) throws IOException {
>             String valueString = value.toString();
>             String[] toks = valueString.split("\t");
>             TestPair p = new TestPair();
>             p.left = toks[0];
>             p.right = toks[1];
>
>
>             output.collect(new AvroWrapper<TestPair>(p),wt);
>         }
>
>  Thanks,
> -Rohini
>