Avro-deserialization-by-generating-class

提供:Dev Guides
移動先:案内検索

AVRO-生成クラスによる逆シリアル化

前に説明したように、スキーマに対応するクラスを生成するか、パーサーライブラリを使用して、Avroスキーマをプログラムに読み込むことができます。 この章では、クラスを生成してスキーマを読み取る方法と、Avroを使用してデータを*デシリアライズ*する方法について説明します。

クラスを生成することによる逆シリアル化

シリアル化されたデータは、ファイル emp.avro に保存されます。 Avroを使用して、デシリアライズして読み取ることができます。

シリアル化されたデータが保存されます

以下の手順に従って、ファイルからシリアル化されたデータを逆シリアル化します。

ステップ1

*SpecificDatumReader* クラスを使用して、 *DatumReader* インターフェイスのオブジェクトを作成します。
DatumReader<emp>empDatumReader = new SpecificDatumReader<emp>(emp.class);

ステップ2

*emp* クラスの *DataFileReader* をインスタンス化します。 このクラスは、ファイルからシリアル化されたデータを読み取ります。 コンストラクターのパラメーターとして、 *Dataumeader* オブジェクトと、シリアル化されたデータが存在するファイルのパスが必要です。
DataFileReader<emp> dataFileReader = new DataFileReader(new File("/path/to/emp.avro"), empDatumReader);

ステップ3

*DataFileReader* のメソッドを使用して、逆シリアル化されたデータを印刷します。
  • Readerに要素がある場合、* hasNext()*メソッドはブール値を返します。
  • DataFileReader の* next()*メソッドは、リーダーにデータを返します。
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);
      }
   }
}

生成されたコードが配置されているディレクトリを参照します。 この場合、* home/Hadoop/Avro_work/with_code_gen。*で

$ cd home/Hadoop/Avro_work/with_code_gen/

ここで、上記のプログラムをコピーして、 DeSerialize.java という名前のファイルに保存します。 次のようにコンパイルして実行します-

$ javac Deserialize.java
$ java Deserialize

出力

{"name": "omar", "id": 1, "salary": 30000, "age": 21, "address": "Hyderabad"}
{"name": "ram", "id": 2, "salary": 40000, "age": 30, "address": "Hyderabad"}
{"name": "robbin", "id": 3, "salary": 35000, "age": 25, "address": "Hyderabad"}