Question

I am trying to do avro serialization in Ruby. I have written the JSON schema, however I like to have the serialized data as bytes in Ruby instead of writing to file.

My code is hanging something like:

SCHEMA = {
           "type": "record",
           "name": "User",
           "fields" :
             [
               {"name": "name", "type": "string"},
               {"name": "id", "type": "long"},
               {"name": "city", "type": "string"}
             ]
         }.to_json

schema = Avro::Schema.parse(SCHEMA)
dw = Avro::IO::DatumWriter.new(schema)
buffer = StringIO.new
encoder = Avro::IO::BinaryEncoder.new(buffer)
???

I have the values for name, id and city and wondering how to create the User object and serialize it into a string / byte buffer.

Was it helpful?

Solution

Figured out myself:

schema = Avro::Schema.parse(SCHEMA)
dw = Avro::IO::DatumWriter.new(schema)
buffer = StringIO.new
encoder = Avro::IO::BinaryEncoder.new(buffer)
datum = Hash["name" =>name, "id" => id, "city" => city]
dw.write(datum, encoder)

buffer has the resultant avro serialized bytes.

Looks like there is no Avro client code generation in Ruby yet. We have to pass the data as Ruby hashes like I have done in for datum field.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top