Monday, September 4, 2017

Avro Serialize and DeSerialize using java

List recordList=//List of Maps. each map represent one row

String strSc="{"type" : "record",  "name" : "event",  "doc" : "event record",  "fields" : [ {    "name" : "event_id",    "type" : "string"  }, {    "name" : "host",    "type" : "string"  }, {    "name" : "source_address",    "type" : "string"  }]}"

Schema avroSchema=new Schema(strSc)

byte[] bytes = null;
ByteArrayOutputStream out=null;
try {
out = new ByteArrayOutputStream();
Encoder encoder = EncoderFactory.get().binaryEncoder(out, null);
GenericData.Record genericRecord = new GenericData.Record(avroSchema);
   avroSchema.getFields().stream().map(Schema.Field::name).filter(field -> record.get(field) != null).forEach(field ->
   {
   //System.out.println((String) field +" - "+record.get(field));
   genericRecord.put((String) field, record.get(field));
   });
writer.write(genericRecord, encoder);
encoder.flush();

bytes = out.toByteArray();

BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(bytes, null);
     result = reader.read(null, decoder);
     System.out.println("enent id: "+ result.get("event_id") );



        

No comments: