AVRO - Deserializzazione mediante parser

Come accennato in precedenza, è possibile leggere uno schema Avro in un programma generando una classe corrispondente a uno schema o utilizzando la libreria parser. In Avro, i dati vengono sempre archiviati con lo schema corrispondente. Pertanto, possiamo sempre leggere un articolo con numero di serie senza generazione di codice.

Questo capitolo descrive come leggere lo schema using parsers library e Deserializing i dati utilizzando Avro.

Deserializzazione mediante libreria parser

I dati serializzati vengono archiviati nel file mydata.txt. Puoi deserializzarlo e leggerlo utilizzando Avro.

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

Passo 1

Prima di tutto, leggi lo schema dal file. Per farlo, usaSchema.Parserclasse. Questa classe fornisce metodi per analizzare lo schema in diversi formati.

Istanziare il file Schema.Parser class passando il percorso del file in cui è archiviato lo schema.

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

Passo 2

Crea un oggetto di DatumReader interfaccia utilizzando SpecificDatumReader classe.

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

Passaggio 3

Istanziare DataFileReaderclasse. Questa classe legge i dati serializzati da un file. Richiede ilDatumReader oggetto e percorso del file in cui esistono i dati serializzati, come parametri per il costruttore.

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

Passaggio 4

Stampare i dati deserializzati, utilizzando i metodi di DataFileReader.

  • Il hasNext() restituisce 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 utilizzando la libreria dei parser

Il seguente programma completo mostra come deserializzare i dati serializzati utilizzando la libreria 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");
   }
}

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

$ cd home/Hadoop/Avro_work/without_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": "ramu", "id": 1, "salary": 30000, "age": 25, "address": "chennai"}
{"name": "rahman", "id": 2, "salary": 35000, "age": 30, "address": "Delhi"}