AVRO - Deserializzazione generando classe

Come descritto in precedenza, è possibile leggere uno schema Avro in un programma generando una classe corrispondente allo schema o utilizzando la libreria parser. Questo capitolo descrive come leggere lo schemaby generating a class e Deserialize i dati utilizzando Avro.

Deserializzazione generando una classe

I dati serializzati vengono archiviati nel file emp.avro. Puoi deserializzarlo e leggerlo utilizzando Avro.

Seguire la procedura indicata di seguito per deserializzare i dati serializzati da un file.

Passo 1

Crea un oggetto di DatumReader interfaccia utilizzando SpecificDatumReader classe.

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

Passo 2

Istanziare DataFileReader per empclasse. Questa classe legge i dati serializzati da un file. Richiede ilDataumeader oggetto e percorso del file in cui sono presenti i dati serializzati, come parametri per il costruttore.

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

Passaggio 3

Stampare i dati deserializzati, utilizzando i metodi di DataFileReader.

  • Il hasNext() restituirà un valore booleano se sono presenti elementi nel lettore.

  • Il next() metodo di DataFileReader restituisce i dati nel lettore.

while(dataFileReader.hasNext()){

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

Esempio: deserializzazione mediante generazione di una classe

Il seguente programma completo mostra come deserializzare i dati in un file utilizzando 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);
      }
   }
}

Naviga nella directory in cui è posizionato il codice generato. In questo caso, ahome/Hadoop/Avro_work/with_code_gen.

$ cd home/Hadoop/Avro_work/with_code_gen/

Ora copia e salva il programma sopra nel file denominato DeSerialize.java. Compilalo ed eseguilo come mostrato di seguito -

$ javac Deserialize.java
$ java Deserialize

Produzione

{"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"}