Как описано ранее, можно прочитать схему Avro в программу, создав класс, соответствующий этой схеме, или используя библиотеку синтаксических анализаторов. В этой главе описывается, как читать схему путем создания класса и десериализации данных с помощью 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 возвращает данные в Reader.
Метод hasNext () вернет логическое значение, если в Reader есть какие-либо элементы.
Метод next () объекта DataFileReader возвращает данные в Reader.
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); } } }
Перейдите в каталог, где находится сгенерированный код. В этом случае дома / Hadoop / Avro_work / with_code_gen.
$ cd home/Hadoop/Avro_work/with_code_gen/
Теперь скопируйте и сохраните вышеуказанную программу в файл с именем DeSerialize.java . Скомпилируйте и выполните его, как показано ниже —