Apache Pig UDF: Phần 3 - Chức năng cửa hàng



Bài đăng này mô tả về Apache Pig UDF - Store Functions. (Apache Pig UDF: Phần 3). Hãy xem các Chức năng Cửa hàng của Apache Pig UDF.

Lớp trừu tượng StoreFunc có các phương thức chính để lưu trữ dữ liệu và đối với hầu hết các trường hợp sử dụng, chỉ cần mở rộng nó là đủ. Có một giao diện tùy chọn có thể được triển khai để đạt được chức năng mở rộng:





StoreMetadata

Giao diện này có các phương thức tương tác với hệ thống siêu dữ liệu để lưu trữ lược đồ và thống kê. Giao diện này là tùy chọn và chỉ nên được triển khai nếu siêu dữ liệu cần được lưu trữ.

Các phương thức cần được ghi đè trong StoreFunc được giải thích bên dưới:



làm thế nào để truyền một nhân đôi thành một int trong java
  • getOutputFormat ():

    Phương thức này sẽ được gọi bởi Pig để lấy OutputFormat được Storer sử dụng. Các phương thức trong OutputFormat sẽ được gọi bởi Pig theo cách tương tự và trong cùng ngữ cảnh với Hadoop trong chương trình Java thu nhỏ bản đồ. Nếu OutputFormat là một Hadoop được đóng gói, thì việc triển khai nên sử dụng API mới dựa trên org.apache.hadoop.mapreduce. Nếu nó là một OutputFormat tùy chỉnh, nó sẽ được triển khai bằng cách sử dụng API mới trong org.apache.hadoop.mapreduce. Phương thức checkOutputSpecs () của OutputFormat sẽ được gọi bởi pig để kiểm tra vị trí đầu ra từ trước. Phương thức này cũng sẽ được gọi là một phần của chuỗi lệnh gọi Hadoop khi lệnh được khởi chạy. Vì vậy việc triển khai phải đảm bảo rằng phương pháp này có thể được gọi nhiều lần mà không có tác dụng phụ không nhất quán.

  • setStoreLocation ():

    Phương pháp này được gọi bởi Pig để thông báo vị trí cửa hàng cho thủ kho. Người lưu trữ nên sử dụng phương pháp này để truyền đạt cùng một thông tin tới OutputFormat bên dưới. Phương pháp này được Pig gọi nhiều lần. Việc triển khai cần lưu ý rằng phương pháp này được gọi nhiều lần và phải đảm bảo không có tác dụng phụ không nhất quán do nhiều lần gọi.

  • chuẩn bịToWrite ():

    Trong API mới, việc ghi dữ liệu được thông qua Định dạng đầu ra do StoreFunc cung cấp. Trong standardToWrite (), RecordWriter được liên kết với Định dạng đầu ra do StoreFunc cung cấp sẽ được chuyển tới StoreFunc. Sau đó, RecordWriter có thể được sử dụng bởi việc triển khai trong putNext () để ghi một bộ dữ liệu biểu diễn một bản ghi dữ liệu theo cách mà RecordWriter mong đợi.

  • putNext ():

    Ý nghĩa của putNext () không thay đổi và được gọi bởi Pig runtime để ghi bộ dữ liệu tiếp theo - trong API mới, đây là phương thức trong đó việc triển khai sẽ sử dụng RecordWriter bên dưới để ghi Tuple ra.

Triển khai mặc định trong StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Phương thức này sẽ được gọi bởi Pig ở cả front end và back end để chuyển một chữ ký duy nhất cho Storer. Chữ ký có thể được sử dụng để lưu trữ bất kỳ thông tin nào vào UDFContext mà Người lưu trữ cần lưu trữ giữa các lệnh gọi phương thức khác nhau trong giao diện người dùng và kết thúc phía sau. Việc triển khai mặc định trong StoreFunc có phần thân trống. Phương thức này sẽ được gọi trước bất kỳ phương thức nào khác.

  • relToAbsPathForStoreLocation ():

    Pig runtime sẽ gọi phương thức này để cho phép Người lưu trữ chuyển đổi vị trí cửa hàng tương đối thành vị trí tuyệt đối. Một triển khai được cung cấp trong StoreFunc xử lý điều này cho các vị trí dựa trên FileSystem.

  • checkSchema ():

    Hàm Store nên triển khai chức năng này để kiểm tra xem một lược đồ nhất định mô tả dữ liệu được ghi có được chấp nhận hay không. Việc triển khai mặc định trong StoreFunc có phần thân trống. Phương thức này sẽ được gọi trước bất kỳ lệnh gọi nào đến setStoreLocation ().

Triển khai ví dụ:

Triển khai bộ lưu trữ trong ví dụ, là bộ lưu trữ cho dữ liệu văn bản với dấu phân cách dòng là ‘
‘Và‘ ‘làm dấu phân cách trường mặc định (có thể được ghi đè bằng cách chuyển một dấu phân cách trường khác trong hàm tạo) - điều này tương tự như trình lưu trữ PigStorage hiện tại trong Pig. Việc triển khai sử dụng một OutputFormat được Hadoop hỗ trợ hiện có - TextOutputFormat làm OutputFormat bên dưới.

public class SimpleTextStorer mở rộng StoreFunc {protected RecordWriterriter = null private byte fieldDel = '' private static final int BUFFER_SIZE = 1024 private static final String UTF8 = 'UTF-8' public PigStorage () {} public PigStorage (String delimiter) {this ( ) if (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} else if (delimiter.length ()> 1delimiter.charAt (0) == '') {switch ( delimiter.charAt (1)) {case 't': this.fieldDel = (byte) '' break case 'x': fieldDel = Integer.valueOf (delimiter.substring (2), 16) .byteValue () break case ' u ': this.fieldDel = Integer.valueOf (delimiter.substring (2)). byteValue () break default: ném mới RuntimeException (' Dấu phân cách không xác định '+ dấu phân cách)}} else {ném mới RuntimeException (' Độ phân giải PigStorage phải là ký tự đơn ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Override public void putNext (Tuple f) ném IOException {int sz = f.size () for (int i = 0 i

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến chúng trong phần nhận xét và chúng tôi sẽ liên hệ lại với bạn.

Bài viết liên quan:



windows thêm java vào đường dẫn

Apache Pig UDF: Phần 2
Apache Pig UDF: Phần 1