Thank you very much for the solution and its explanation.

--
Emre Sevinç

On Mon, Dec 15, 2014 at 8:12 PM, Doug Cutting <[email protected]> wrote:
>
> Avro's JSON encoding requires that non-null union values be tagged
> with their intended type.  This is because unions like
> ["bytes","string"] and ["int","long"] are ambiguous in JSON, the first
> are both encoded as JSON strings, while the second are both encoded as
> JSON numbers.
>
> http://avro.apache.org/docs/current/spec.html#json_encoding
>
> Thus your record must be encoded as:
>
> {"name": "Alyssa", "favorite_number": {"int": 7}, "favorite_color": null}
>
> Doug
>
> On Mon, Dec 15, 2014 at 7:27 AM, Emre Sevinc <[email protected]>
> wrote:
> > Hello,
> >
> > I'm trying to validate a JSON file using an Avro schema and write the
> > corresponding Avro file. First, I've defined the following Avro schema
> named
> > user.avsc:
> >
> > {"namespace": "example.avro",
> >  "type": "record",
> >  "name": "user",
> >  "fields": [
> >      {"name": "name", "type": "string"},
> >      {"name": "favorite_number",  "type": ["int", "null"]},
> >      {"name": "favorite_color", "type": ["string", "null"]}
> >  ]
> > }
> >
> > Then created a user.json file:
> >
> > {"name": "Alyssa", "favorite_number": 7, "favorite_color": null}
> >
> > And then tried to run:
> >
> > java -jar ~/bin/avro-tools-1.7.7.jar fromjson --schema-file user.avsc
> > user.json > user.avro
> >
> > But I get the following exception:
> >
> > Exception in thread "main" org.apache.avro.AvroTypeException: Expected
> > start-union. Got VALUE_NUMBER_INT
> >     at org.apache.avro.io.JsonDecoder.error(JsonDecoder.java:697)
> >     at org.apache.avro.io.JsonDecoder.readIndex(JsonDecoder.java:441)
> >     at
> > org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:290)
> >     at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
> >     at
> > org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:267)
> >     at
> >
> org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:155)
> >     at
> >
> org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193)
> >     at
> >
> org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183)
> >     at
> >
> org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151)
> >     at
> >
> org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142)
> >     at
> org.apache.avro.tool.DataFileWriteTool.run(DataFileWriteTool.java:99)
> >     at org.apache.avro.tool.Main.run(Main.java:84)
> >     at org.apache.avro.tool.Main.main(Main.java:73)
> >
> >
> > Am I missing something? Why do I get "Expected start-union. Got
> > VALUE_NUMBER_INT".
> >
> >
> > --
> > Emre Sevinç
>


-- 
Emre Sevinc

Reply via email to