Avro-deserialization-using-parsers

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

AVRO-パーサーを使用した逆シリアル化

前述のように、スキーマに対応するクラスを生成するか、パーサーライブラリを使用して、Avroスキーマをプログラムに読み込むことができます。 Avroでは、データは常に対応するスキーマとともに保存されます。 したがって、シリアル化されたアイテムをコード生成なしでいつでも読み取ることができます。

この章では、パーサーライブラリを使用してスキーマを読み取る方法、およびAvroを使用してデータを*デシリアライズする方法について説明します。

パーサーライブラリを使用した逆シリアル化

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

Avro Utility

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

ステップ1

まず、ファイルからスキーマを読み取ります。 これを行うには、 Schema.Parser クラスを使用します。 このクラスは、さまざまな形式でスキーマを解析するメソッドを提供します。

スキーマが保存されているファイルパスを渡すことにより、 Schema.Parser クラスをインスタンス化します。

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

ステップ2

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

ステップ3

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

ステップ4

*DataFileReader* のメソッドを使用して、逆シリアル化されたデータを印刷します。
  • Readerに要素がある場合、* hasNext()*メソッドはブール値を返します .
  • DataFileReader の* next()*メソッドは、リーダーにデータを返します。
while(dataFileReader.hasNext()){

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

例–パーサーライブラリを使用した逆シリアル化

次の完全なプログラムは、パーサーライブラリを使用してシリアル化されたデータを逆シリアル化する方法を示しています-

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");
   }
}

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

$ cd home/Hadoop/Avro_work/without_code_gen/

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

$ javac Deserialize.java
$ java Deserialize

出力

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