AVRO - Deserializacja przy użyciu parserów

Jak wspomniano wcześniej, schemat Avro można wczytać do programu, generując klasę odpowiadającą schematowi lub korzystając z biblioteki parserów. W Avro dane są zawsze przechowywane wraz z odpowiednim schematem. Dlatego zawsze możemy odczytać serializowany element bez generowania kodu.

W tym rozdziale opisano, jak czytać schemat using parsers library i Deserializing dane za pomocą Avro.

Deserializacja przy użyciu biblioteki parserów

Zserializowane dane są przechowywane w pliku mydata.txt. Możesz deserializować i czytać go za pomocą Avro.

Postępuj zgodnie z procedurą podaną poniżej, aby zdeserializować serializowane dane z pliku.

Krok 1

Przede wszystkim przeczytaj schemat z pliku. Aby to zrobić, użyjSchema.Parserklasa. Ta klasa udostępnia metody do analizowania schematu w różnych formatach.

Utwórz wystąpienie Schema.Parser class, przekazując ścieżkę do pliku, w którym przechowywany jest schemat.

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

Krok 2

Utwórz obiekt DatumReader interfejs przy użyciu SpecificDatumReader klasa.

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

Krok 3

Utwórz instancję DataFileReaderklasa. Ta klasa odczytuje serializowane dane z pliku. WymagaDatumReader obiekt i ścieżka do pliku, w którym istnieją serializowane dane, jako parametry konstruktora.

DataFileReader<GenericRecord> dataFileReader = new DataFileReader<GenericRecord>(new File("/path/to/mydata.txt"), datumReader);

Krok 4

Wydrukuj zdeserializowane dane przy użyciu metod DataFileReader.

  • Plik hasNext() metoda zwraca wartość logiczną, jeśli w programie Reader znajdują się jakieś elementy.

  • Plik next() metoda DataFileReader zwraca dane w Czytniku.

while(dataFileReader.hasNext()){

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

Przykład - deserializacja przy użyciu biblioteki parserów

Poniższy kompletny program pokazuje, jak deserializować zserializowane dane przy użyciu biblioteki 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");
   }
}

Przejdź do katalogu, w którym znajduje się wygenerowany kod. W tym przypadku jest to godzhome/Hadoop/Avro_work/without_code_gen.

$ cd home/Hadoop/Avro_work/without_code_gen/

Teraz skopiuj i zapisz powyższy program w pliku o nazwie DeSerialize.java. Skompiluj i wykonaj, jak pokazano poniżej -

$ javac Deserialize.java
$ java Deserialize

Wynik

{"name": "ramu", "id": 1, "salary": 30000, "age": 25, "address": "chennai"}
{"name": "rahman", "id": 2, "salary": 35000, "age": 30, "address": "Delhi"}