AVRO - Hủy đăng ký sử dụng trình phân tích cú pháp

Như đã đề cập trước đó, người ta có thể đọc một lược đồ Avro vào một chương trình bằng cách tạo một lớp tương ứng với một lược đồ hoặc bằng cách sử dụng thư viện phân tích cú pháp. Trong Avro, dữ liệu luôn được lưu trữ với lược đồ tương ứng của nó. Do đó, chúng ta luôn có thể đọc một mục được tuần tự hóa mà không cần tạo mã.

Chương này mô tả cách đọc lược đồ using parsers libraryDeserializing dữ liệu sử dụng Avro.

Hủy đăng ký bằng Thư viện phân tích cú pháp

Dữ liệu tuần tự hóa được lưu trữ trong tệp mydata.txt. Bạn có thể deserialize và đọc nó bằng Avro.

Làm theo quy trình dưới đây để giải mã dữ liệu tuần tự hóa từ một tệp.

Bước 1

Trước hết, hãy đọc lược đồ từ tệp. Để làm như vậy, hãy sử dụngSchema.Parserlớp học. Lớp này cung cấp các phương thức để phân tích cú pháp lược đồ theo các định dạng khác nhau.

Khởi tạo Schema.Parser lớp bằng cách chuyển đường dẫn tệp nơi lược đồ được lưu trữ.

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

Bước 2

Tạo một đối tượng của DatumReader giao diện sử dụng SpecificDatumReader lớp học.

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

Bước 3

Khởi tạo DataFileReaderlớp học. Lớp này đọc dữ liệu tuần tự từ một tệp. Nó yêu cầuDatumReader đối tượng và đường dẫn của tệp nơi dữ liệu được tuần tự hóa tồn tại, như một tham số cho hàm tạo.

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

Bước 4

In dữ liệu được giải hóa bằng cách sử dụng các phương pháp của DataFileReader.

  • Các hasNext() phương thức trả về boolean nếu có bất kỳ phần tử nào trong Reader.

  • Các next() phương pháp của DataFileReader trả về dữ liệu trong Trình đọc.

while(dataFileReader.hasNext()){

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

Ví dụ - Hủy đăng ký sử dụng Thư viện phân tích cú pháp

Chương trình hoàn chỉnh sau đây cho thấy cách giải mã dữ liệu tuần tự hóa bằng thư viện 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");
   }
}

Duyệt vào thư mục nơi mã đã tạo được đặt. Trong trường hợp này, nó ởhome/Hadoop/Avro_work/without_code_gen.

$ cd home/Hadoop/Avro_work/without_code_gen/

Bây giờ sao chép và lưu chương trình trên trong tệp có tên DeSerialize.java. Biên dịch và thực thi nó như hình dưới đây -

$ javac Deserialize.java
$ java Deserialize

Đầu ra

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