AVRO - Deserialización generando clase

Como se describió anteriormente, se puede leer un esquema Avro en un programa generando una clase correspondiente al esquema o usando la biblioteca de analizadores. Este capítulo describe cómo leer el esquemaby generating a class y Deserialize los datos usando Avro.

Deserialización generando una clase

Los datos serializados se almacenan en el archivo emp.avro. 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

Crea un objeto de DatumReader interfaz usando SpecificDatumReader clase.

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

Paso 2

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

DataFileReader<emp> dataFileReader = new DataFileReader(new File("/path/to/emp.avro"), empDatumReader);

Paso 3

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

  • los hasNext() El método devolverá un booleano si hay algún elemento 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 generando una clase

El siguiente programa completo muestra cómo deserializar los datos en un archivo usando Avro.

import java.io.File;
import java.io.IOException;

import org.apache.avro.file.DataFileReader;
import org.apache.avro.io.DatumReader;
import org.apache.avro.specific.SpecificDatumReader;

public class Deserialize {
   public static void main(String args[]) throws IOException{
	
      //DeSerializing the objects
      DatumReader<emp> empDatumReader = new SpecificDatumReader<emp>(emp.class);
		
      //Instantiating DataFileReader
      DataFileReader<emp> dataFileReader = new DataFileReader<emp>(new
         File("/home/Hadoop/Avro_Work/with_code_genfile/emp.avro"), empDatumReader);
      emp em=null;
		
      while(dataFileReader.hasNext()){
      
         em=dataFileReader.next(em);
         System.out.println(em);
      }
   }
}

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

$ cd home/Hadoop/Avro_work/with_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": "omar", "id": 1, "salary": 30000, "age": 21, "address": "Hyderabad"}
{"name": "ram", "id": 2, "salary": 40000, "age": 30, "address": "Hyderabad"}
{"name": "robbin", "id": 3, "salary": 35000, "age": 25, "address": "Hyderabad"}