AVRO - Giải mã bằng cách tạo lớp

Như đã mô tả 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 lược đồ hoặc bằng cách sử dụng thư viện phân tích cú pháp. Chương này mô tả cách đọc lược đồby generating a classDeserialize dữ liệu sử dụng Avro.

Hủy đăng ký bằng cách tạo một lớp

Dữ liệu tuần tự hóa được lưu trữ trong tệp emp.avro. 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

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 2

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

DataFileReader<emp> dataFileReader = new DataFileReader(new File("/path/to/emp.avro"), empDatumReader);

Bước 3

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 sẽ 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ý bằng cách tạo lớp

Chương trình hoàn chỉnh sau đây chỉ ra cách giải mã dữ liệu trong tệp bằng 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);
      }
   }
}

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

$ cd home/Hadoop/Avro_work/with_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": "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"}