AVRO - Désérialisation à l'aide d'analyseurs

Comme mentionné précédemment, on peut lire un schéma Avro dans un programme soit en générant une classe correspondant à un schéma soit en utilisant la bibliothèque d'analyseurs. Dans Avro, les données sont toujours stockées avec leur schéma correspondant. Par conséquent, nous pouvons toujours lire un article sérialisé sans génération de code.

Ce chapitre décrit comment lire le schéma using parsers library et Deserializing les données en utilisant Avro.

Désérialisation à l'aide de la bibliothèque d'analyseurs

Les données sérialisées sont stockées dans le fichier mydata.txt. Vous pouvez le désérialiser et le lire à l'aide d'Avro.

Suivez la procédure ci-dessous pour désérialiser les données sérialisées d'un fichier.

Étape 1

Tout d'abord, lisez le schéma à partir du fichier. Pour ce faire, utilisezSchema.Parserclasse. Cette classe fournit des méthodes pour analyser le schéma dans différents formats.

Instancier le Schema.Parser class en passant le chemin du fichier où le schéma est stocké.

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

Étape 2

Créer un objet de DatumReader interface utilisant SpecificDatumReader classe.

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

Étape 3

Instancier DataFileReaderclasse. Cette classe lit les données sérialisées à partir d'un fichier. Cela nécessite leDatumReader objet et chemin du fichier dans lequel les données sérialisées existent, en tant que paramètres du constructeur.

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

Étape 4

Imprimez les données désérialisées, en utilisant les méthodes de DataFileReader.

  • le hasNext() renvoie un booléen s'il y a des éléments dans le Reader.

  • le next() méthode de DataFileReader renvoie les données dans le Reader.

while(dataFileReader.hasNext()){

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

Exemple - Désérialisation à l'aide de la bibliothèque d'analyseurs

Le programme complet suivant montre comment désérialiser les données sérialisées à l'aide de la bibliothèque 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");
   }
}

Naviguez dans le répertoire où le code généré est placé. Dans ce cas, c'est àhome/Hadoop/Avro_work/without_code_gen.

$ cd home/Hadoop/Avro_work/without_code_gen/

Maintenant, copiez et enregistrez le programme ci-dessus dans le fichier nommé DeSerialize.java. Compilez et exécutez-le comme indiqué ci-dessous -

$ javac Deserialize.java
$ java Deserialize

Production

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