Apache Pig UDF: Bagian 3 - Fungsi Penyimpanan



Posting ini menjelaskan tentang Apache Pig UDF - Fungsi Penyimpanan. (Apache Pig UDF: Bagian 3). Lihatlah Fungsi Toko Apache Pig UDF.

Kelas abstrak StoreFunc memiliki metode utama untuk menyimpan data dan untuk sebagian besar kasus penggunaan, kelas itu sudah cukup untuk memperluasnya. Ada antarmuka opsional yang dapat diterapkan untuk mencapai fungsionalitas yang diperluas:





StoreMetadata

Antarmuka ini memiliki metode untuk berinteraksi dengan sistem metadata untuk menyimpan skema dan statistik. Antarmuka ini opsional dan harus diterapkan hanya jika metadata perlu disimpan.

abstraksi data di c ++

Metode yang perlu diganti di StoreFunc dijelaskan di bawah ini:



  • getOutputFormat ():

    Metode ini akan dipanggil oleh Pig untuk mendapatkan OutputFormat yang digunakan oleh Storer. Metode dalam OutputFormat akan dipanggil oleh Pig dengan cara yang sama dan dalam konteks yang sama seperti oleh Hadoop dalam program Java pengurangan peta. Jika OutputFormat adalah paket Hadoop, implementasi harus menggunakan API berbasis baru di bawah org.apache.hadoop.mapreduce. Jika ini adalah OutputFormat khusus, ini harus diimplementasikan menggunakan API baru di bawah org.apache.hadoop.mapreduce. Metode checkOutputSpecs () dari OutputFormat akan dipanggil oleh pig untuk memeriksa lokasi keluaran di depan. Metode ini juga akan dipanggil sebagai bagian dari urutan panggilan Hadoop saat tugas diluncurkan. Jadi implementasi harus memastikan bahwa metode ini dapat dipanggil beberapa kali tanpa efek samping yang tidak konsisten.

  • setStoreLocation ():

    Metode ini dipanggil oleh Pig untuk mengkomunikasikan lokasi penyimpanan ke tempat penyimpanan. Penyimpanan harus menggunakan metode ini untuk mengkomunikasikan informasi yang sama ke OutputFormat yang mendasarinya. Metode ini dipanggil berkali-kali oleh Pig. Penerapan harus memperhatikan bahwa metode ini dipanggil beberapa kali dan harus memastikan tidak ada efek samping yang tidak konsisten karena beberapa panggilan.

  • preparedToWrite ():

    Di API baru, penulisan data melalui OutputFormat yang disediakan oleh StoreFunc. Dalam preparedToWrite () RecordWriter yang terkait dengan OutputFormat yang disediakan oleh StoreFunc diteruskan ke StoreFunc. RecordWriter kemudian dapat digunakan oleh implementasi di putNext () untuk menulis tupel yang mewakili catatan data dengan cara yang diharapkan oleh RecordWriter.

  • putNext ():

    Arti putNext () tidak berubah dan dipanggil oleh runtime Pig untuk menulis tupel data berikutnya - dalam API baru, ini adalah metode di mana implementasinya akan menggunakan RecordWriter yang mendasari untuk menulis Tuple.

Implementasi Default di StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Metode ini akan dipanggil oleh Pig baik di front end maupun back end untuk memberikan tanda tangan unik ke Storer. Tanda tangan dapat digunakan untuk menyimpan informasi apa pun ke dalam konteks UDFC yang perlu disimpan oleh Storer di antara berbagai pemanggilan metode di ujung depan dan belakang. Implementasi default di StoreFunc memiliki badan kosong. Metode ini akan dipanggil sebelum metode lainnya.

  • relToAbsPathForStoreLocation ():

    Waktu proses pig akan memanggil metode ini untuk memungkinkan Storer mengonversi lokasi penyimpanan relatif ke lokasi absolut. Implementasi disediakan di StoreFunc yang menangani ini untuk lokasi berbasis FileSystem.

  • checkSchema ():

    Fungsi Store harus mengimplementasikan fungsi ini untuk memeriksa bahwa skema yang diberikan yang mendeskripsikan data yang akan ditulis dapat diterima. Implementasi default di StoreFunc memiliki badan kosong. Metode ini akan dipanggil sebelum panggilan apa pun ke setStoreLocation ().

Contoh Implementasi:

Implementasi penyimpanan dalam contoh, adalah penyimpanan untuk data teks dengan pembatas baris sebagai '
'Dan' 'sebagai pembatas bidang default (yang dapat diganti dengan melewatkan pembatas bidang yang berbeda di konstruktor) - ini mirip dengan penyimpanan PigStorage saat ini di Pig. Implementasinya menggunakan OutputFormat - TextOutputFormat yang didukung Hadoop yang sudah ada sebagai OutputFormat yang mendasarinya.

kelas publik SimpleTextStorer memperluas StoreFunc {dilindungi RecordWriter writer = null byte privat fieldDel = '' private static final int BUFFER_SIZE = 1024 private static final String UTF8 = 'UTF-8' public PigStorage () {} public PigStorage (String pembatas) {ini ( ) 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: throw new RuntimeException (' Unknown delimiter '+ delimiter)}} else {throw new RuntimeException (' PigStorage delimeter harus berupa karakter tunggal ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Override public void putNext (Tuple f) melempar IOException {int sz = f.size () untuk (int i = 0 i

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar dan kami akan menghubungi Anda kembali.

Posting terkait:



Apache Pig UDF: Bagian 2
Apache Pig UDF: Bagian 1