Как упоминалось ранее, можно прочитать схему Avro в программу, создав класс, соответствующий схеме, или используя библиотеку синтаксических анализаторов. В Avro данные всегда хранятся с соответствующей схемой. Поэтому мы всегда можем прочитать сериализованный элемент без генерации кода.
В этой главе описывается, как читать схему с использованием библиотеки синтаксических анализаторов и десериализацию данных с помощью Avro.
Десериализация с использованием библиотеки парсеров
Сериализованные данные хранятся в файле mydata.txt . Вы можете десериализовать и прочитать его с помощью Avro.
Следуйте процедуре, приведенной ниже, для десериализации сериализованных данных из файла.
Шаг 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 . Скомпилируйте и выполните его, как показано ниже —