AVRO-クラスを生成することによる逆シリアル化
前に説明したように、スキーマに対応するクラスを生成するか、パーサーライブラリを使用することにより、Avroスキーマをプログラムに読み込むことができます。この章では、スキーマの読み方について説明しますby generating a class そして Deserialize 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() リーダーに要素がある場合、メソッドはブール値を返します。
ザ・ next() の方法 DataFileReader リーダーにデータを返します。
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"}