Учебники

AVRO — десериализация с использованием парсеров

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

В этой главе описывается, как читать схему с использованием библиотеки синтаксических анализаторов и десериализацию данных с помощью Avro.

Десериализация с использованием библиотеки парсеров

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

Avro Utility

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

Шаг 1

Прежде всего, прочитайте схему из файла. Для этого используйте класс Schema.Parser . Этот класс предоставляет методы для анализа схемы в разных форматах.

Создайте экземпляр класса Schema.Parser , передав путь к файлу, в котором хранится схема.

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

Шаг 2

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

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

Шаг 3

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

 DataFileReader <GenericRecord> dataFileReader = new DataFileReader <GenericRecord> (новый файл ("/ path / to / mydata.txt"), datumReader);

Шаг 4

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

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

  • Метод next () объекта DataFileReader возвращает данные в Reader.

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

Метод next () объекта DataFileReader возвращает данные в Reader.

while(dataFileReader.hasNext()){

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

Пример — десериализация с использованием библиотеки парсеров

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

Перейдите в каталог, где находится сгенерированный код. В этом случае он находится дома / Hadoop / Avro_work / без_кода_ген .

$ cd home/Hadoop/Avro_work/without_code_gen/

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