AVRO - Deserialization โดยใช้ Parsers

ดังที่ได้กล่าวไว้ก่อนหน้านี้เราสามารถอ่านสคีมา Avro ในโปรแกรมได้โดยการสร้างคลาสที่สอดคล้องกับสคีมาหรือโดยใช้ไลบรารีตัวแยกวิเคราะห์ ใน Avro ข้อมูลจะถูกจัดเก็บด้วยสคีมาที่เกี่ยวข้องเสมอ ดังนั้นเราสามารถอ่านรายการที่ทำให้เป็นอนุกรมได้ตลอดเวลาโดยไม่ต้องสร้างรหัส

บทนี้อธิบายวิธีการอ่านสคีมา using parsers library และ Deserializing ข้อมูลโดยใช้ Avro

Deserialization โดยใช้ Parsers Library

ข้อมูลอนุกรมจะถูกเก็บไว้ในไฟล์ mydata.txt. คุณสามารถ deserialize และอ่านโดยใช้ Avro

ทำตามขั้นตอนที่ระบุด้านล่างเพื่อแยกข้อมูลซีเรียลออกจากไฟล์

ขั้นตอนที่ 1

ก่อนอื่นอ่านสคีมาจากไฟล์ โดยใช้Schema.Parserชั้นเรียน คลาสนี้จัดเตรียมเมธอดในการแยกวิเคราะห์สคีมาในรูปแบบต่างๆ

เริ่มต้นไฟล์ Schema.Parser คลาสโดยส่งเส้นทางไฟล์ที่เก็บสคีมา

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

ขั้นตอนที่ 2

สร้างวัตถุของ DatumReader อินเทอร์เฟซโดยใช้ SpecificDatumReader ชั้นเรียน

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

พิมพ์ข้อมูล deserialized โดยใช้วิธีการ DataFileReader.

  • hasNext() วิธีการคืนค่าบูลีนหากมีองค์ประกอบใด ๆ ใน Reader

  • next() วิธีการของ DataFileReader ส่งคืนข้อมูลใน Reader

while(dataFileReader.hasNext()){

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

ตัวอย่าง - Deserialization โดยใช้ Parsers Library

โปรแกรมที่สมบูรณ์ต่อไปนี้แสดงวิธีการแยกซีเรียลไลซ์ข้อมูลซีเรียลโดยใช้ไลบรารีพาร์เซอร์ -

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