AVRO - Deserialización mediante analizadores

Como se mencionó anteriormente, se puede leer un esquema de Avro en un programa generando una clase correspondiente a un esquema o usando la biblioteca de analizadores. En Avro, los datos siempre se almacenan con su esquema correspondiente. Por lo tanto, siempre podemos leer un artículo serializado sin generación de código.

Este capítulo describe cómo leer el esquema using parsers library y Deserializing los datos usando Avro.

Deserialización mediante la biblioteca de analizadores

Los datos serializados se almacenan en el archivo mydata.txt. Puede deserializarlo y leerlo con Avro.

Siga el procedimiento que se indica a continuación para deserializar los datos serializados de un archivo.

Paso 1

En primer lugar, lea el esquema del archivo. Para hacerlo, useSchema.Parserclase. Esta clase proporciona métodos para analizar el esquema en diferentes formatos.

Instancia del Schema.Parser class pasando la ruta del archivo donde se almacena el esquema.

Schema schema = new Schema.Parser().parse(new File("/path/to/emp.avsc"));

Paso 2

Crea un objeto de DatumReader interfaz usando SpecificDatumReader clase.

DatumReader<emp>empDatumReader = new SpecificDatumReader<emp>(emp.class);

Paso 3

Instanciar DataFileReaderclase. Esta clase lee datos serializados de un archivo. Requiere elDatumReader objeto y ruta del archivo donde existen los datos serializados, como parámetros para el constructor.

DataFileReader<GenericRecord> dataFileReader = new DataFileReader<GenericRecord>(new File("/path/to/mydata.txt"), datumReader);

Paso 4

Imprima los datos deserializados, utilizando los métodos de DataFileReader.

  • los hasNext() El método devuelve un valor booleano si hay elementos en el Reader.

  • los next() método de DataFileReader devuelve los datos en el lector.

while(dataFileReader.hasNext()){

   em=dataFileReader.next(em);
   System.out.println(em);
}

Ejemplo: deserialización mediante la biblioteca de analizadores

El siguiente programa completo muestra cómo deserializar los datos serializados usando la biblioteca Parsers:

public class Deserialize {
   public static void main(String args[]) throws Exception{
	
      //Instantiating the Schema.Parser class.
      Schema schema = new Schema.Parser().parse(new File("/home/Hadoop/Avro/schema/emp.avsc"));
      DatumReader<GenericRecord> datumReader = new GenericDatumReader<GenericRecord>(schema);
      DataFileReader<GenericRecord> dataFileReader = new DataFileReader<GenericRecord>(new File("/home/Hadoop/Avro_Work/without_code_gen/mydata.txt"), datumReader);
      GenericRecord emp = null;
		
      while (dataFileReader.hasNext()) {
         emp = dataFileReader.next(emp);
         System.out.println(emp);
      }
      System.out.println("hello");
   }
}

Busque en el directorio donde se coloca el código generado. En este caso, está enhome/Hadoop/Avro_work/without_code_gen.

$ cd home/Hadoop/Avro_work/without_code_gen/

Ahora copie y guarde el programa anterior en el archivo llamado DeSerialize.java. Compílelo y ejecútelo como se muestra a continuación:

$ javac Deserialize.java
$ java Deserialize

Salida

{"name": "ramu", "id": 1, "salary": 30000, "age": 25, "address": "chennai"}
{"name": "rahman", "id": 2, "salary": 35000, "age": 30, "address": "Delhi"}