import org.apache.avro.Schema import test.avro.User object SampleAvroEvolve { def main(args: Array[String]): Unit = { // writeV1() val result = readV2fromV1() println(result) } def readV1() = { val schemaV1 = new Schema.Parser().parse( """ |{ | "namespace": "test.avro", | "type": "record", | "name": "User", | "fields": [ | {"name": "name", "type": "string"}, | {"name": "favorite_number", "type": "int"}, | {"name": "favorite_color", "type": "string"} | ] |} """.stripMargin ) val bytesV1 = avroUtils.readFile("/tmp/userv1.bin") avroUtils.readSpecificBinary(bytesV1, schemaV1, schemaV1, new User) } def readV2fromV1() = { val schemaV1 = new Schema.Parser().parse( """ |{ | "namespace": "test.avro", | "type": "record", | "name": "User", | "fields": [ | {"name": "name", "type": "string"}, | {"name": "favorite_number", "type": "int"}, | {"name": "favorite_color", "type": "string"} | ] |} """.stripMargin ) val schemaV2 = new Schema.Parser().parse( """ |{ | "namespace": "test.avro", | "type": "record", | "name": "User", | "fields": [ | {"name": "name", "type": "string"}, | {"name": "favorite_number", "type": "int"}, | {"name": "favorite_animal", "type": "string", "default": "tiger"}, | {"name": "favorite_color", "type": "string"} | ] |} """.stripMargin ) val bytesV1 = avroUtils.readFile("/tmp/userv1.bin") avroUtils.readSpecificBinary(bytesV1, schemaV2, schemaV1, new User) } def writeV1(): Unit = { val schemaV1 = new Schema.Parser().parse( """ |{ | "namespace": "test.avro", | "type": "record", | "name": "User", | "fields": [ | {"name": "name", "type": "string"}, | {"name": "favorite_number", "type": "int"}, | {"name": "favorite_color", "type": "string"} | ] |} """.stripMargin ) val userV1 = new User userV1.name = "Alyssa" userV1.favorite_number = 256 userV1.favorite_color = "blue" val bytesV1 = avroUtils.writeSpecificBinary(userV1, schemaV1) avroUtils.writeFile("/tmp/userv1.bin", bytesV1) } }