AVRO - десериализация путем создания класса

Как описано ранее, схему Avro можно прочитать в программе либо путем создания класса, соответствующего схеме, либо с помощью библиотеки анализаторов. В этой главе описывается, как читать схемуby generating a class и Deserialize данные с помощью Avro.

Десериализация путем создания класса

Сериализованные данные хранятся в файле emp.avro. Вы можете десериализовать и прочитать его с помощью Avro.

Следуйте приведенной ниже процедуре, чтобы десериализовать сериализованные данные из файла.

Шаг 1

Создать объект DatumReader интерфейс с использованием SpecificDatumReader класс.

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

Шаг 2

Создать экземпляр DataFileReader за empкласс. Этот класс читает сериализованные данные из файла. Это требуетDataumeader объект и путь к файлу, в котором существуют сериализованные данные, в качестве параметров для конструктора.

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

Шаг 3

Распечатайте десериализованные данные, используя методы DataFileReader.

  • В hasNext() метод вернет логическое значение, если в Reader есть какие-либо элементы.

  • В next() метод DataFileReader возвращает данные в Читателе.

while(dataFileReader.hasNext()){

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

Пример - десериализация путем создания класса

Следующая полная программа показывает, как десериализовать данные в файле с помощью 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);
      }
   }
}

Перейдите в каталог, в котором размещен сгенерированный код. В этом случае приhome/Hadoop/Avro_work/with_code_gen.

$ cd home/Hadoop/Avro_work/with_code_gen/

Теперь скопируйте и сохраните указанную выше программу в файле с именем DeSerialize.java. Скомпилируйте и выполните его, как показано ниже -

$ javac Deserialize.java
$ java Deserialize

Вывод

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