AVRO - desserialização por classe de geração

Conforme descrito anteriormente, é possível ler um esquema Avro em um programa gerando uma classe correspondente ao esquema ou usando a biblioteca de analisadores. Este capítulo descreve como ler o esquemaby generating a class e Deserialize os dados usando Avro.

Desserialização por meio da geração de uma classe

Os dados serializados são armazenados no arquivo emp.avro. Você pode desserializar e ler usando Avro.

Siga o procedimento abaixo para desserializar os dados serializados de um arquivo.

Passo 1

Crie um objeto de DatumReader interface usando SpecificDatumReader classe.

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

Passo 2

Instanciar DataFileReader para empclasse. Esta classe lê dados serializados de um arquivo. Requer oDataumeader objeto e caminho do arquivo onde os dados serializados estão existentes, como um parâmetro para o construtor.

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

etapa 3

Imprima os dados desserializados, usando os métodos de DataFileReader.

  • o hasNext() método retornará um booleano se houver algum elemento no Reader.

  • o next() método de DataFileReader retorna os dados no Reader.

while(dataFileReader.hasNext()){

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

Exemplo - desserialização gerando uma classe

O programa completo a seguir mostra como desserializar os dados em um arquivo 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);
      }
   }
}

Navegue até o diretório onde o código gerado é colocado. Neste caso, emhome/Hadoop/Avro_work/with_code_gen.

$ cd home/Hadoop/Avro_work/with_code_gen/

Agora, copie e salve o programa acima no arquivo chamado DeSerialize.java. Compile e execute-o conforme mostrado abaixo -

$ javac Deserialize.java
$ java Deserialize

Resultado

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