Figured out the read problem. Of course I had an if statement where I need a while. :)
________________________________ From: Poole, Samuel [USA] [[email protected]] Sent: Monday, August 08, 2011 3:56 PM To: [email protected] Subject: RE: Java Example of writing a union Thank you very much. Yes, this works good. And then I took it one step further to try and get the schema put in the file and also to apply encoding. FOO fooObj = .... BAR barObj = .... BAR barObj2 = .... ByteArrayOutputStream out = new ByteArrayOutputStream(); DatumWriter<SpecificRecord> writer = new SpecificDatumWriter<SpecificRecord>(yourSchema); DataFileWriter filewriter=new DataFileWriter(writer); CodecFactory codec = CodecFactory.deflateCodec(9); filewriter.setCodec(codec); filewriter.create(yourSchema,out); encoder = EncoderFactory.get().binaryEncoder(out, encoder); filewriter.append(fooObj); filewriter.append(barObj); filewriter.append(barObj2); OutputStream outstream=new FileOutputStream("/somefolder/somefile.avro"); out.writeTo(outstream); this code works, but now I have an issue with reading the file.... When I read the file, I can only see the first datum in the union. I know that all of the datums were written to the file because of the size of the file, but I can't read all of the datums. Here is my code to read the union file. Schema yourSchema=Schema.parse(new File("/somefolder/someschema.avro")); DatumReader<SpecificRecord> datumreader=new SpecificDatumReader<SpecificRecord>(yourSchema); DataFileReader reader=new DataFileReader(new File("/somefolder/somefile.avro"),datumreader); while (reader.hasNext()){ SpecificRecord result=(SpecificRecord) reader.next(); System.out.println(result.getClass()); } Not sure if I have a problem with how I created the file or how I am reading the file.... Any ideas? ________________________________ From: Vyacheslav Zholudev [[email protected]] Sent: Monday, August 08, 2011 12:52 PM To: [email protected] Subject: Re: Java Example of writing a union I'm assuming for now that you are using a specific writer and you have a union schema with two records FOO and BAR (you should get two classes FOO and BAR generated by avro tools): FOO fooObj = .... BAR barObj = .... BAR barObj2 = .... ByteArrayOutputStream out = new ByteArrayOutputStream(); DatumWriter<GenericRecord> writer = new SpecificDatumWriter<Record>(yourSchema); encoder = EncoderFactory.get().binaryEncoder(out, encoder); writer.write(fooObj, encoder); writer.write(barObj, encoder); writer.write(barObj2, encoder); encoder.flush(); out.close(); Does it make sense? Vyacheslav On Aug 8, 2011, at 3:53 PM, Sam Poole wrote: Does anybody have an example of writing a file that uses a union schema? I am having problems trying to write a file that uses a union schema because once I set the schema, I can't add an individual datum because it is not part of a union. -- View this message in context: http://apache-avro.679487.n3.nabble.com/Java-Example-of-writing-a-union-tp3235624p3235624.html Sent from the Avro - Users mailing list archive at Nabble.com<http://Nabble.com>.
