Apache Pig UDF: Bahagi 3 - Mga Pag-andar ng Tindahan



Inilalarawan ng post na ito ang tungkol sa Apache Pig UDF - Mga Pag-andar ng Store. (Apache Pig UDF: Bahagi 3). Tingnan ang Mga Pag-andar ng Store ng Apache Pig UDF.

Ang klase ng StoreFunc abstract ay may pangunahing mga pamamaraan para sa pagtatago ng data at para sa karamihan ng mga kaso ng paggamit dapat itong sapat upang pahabain ito. Mayroong isang opsyonal na interface na maaaring ipatupad upang makamit ang pinalawak na pag-andar:





StoreMetadata

Ang interface na ito ay may mga pamamaraan upang makipag-ugnay sa mga metadata system upang mag-imbak ng iskema at mga istatistika. Ang interface na ito ay opsyonal at dapat ipatupad lamang kung kailangang maiimbak ang metadata.

Ang mga pamamaraan na kailangang ma-override sa StoreFunc ay ipinaliwanag sa ibaba:



  • getOutputFormat ():

    Ang pamamaraang ito ay tatawagan ng Pig upang makuha ang OutputFormat na ginamit ng Storer. Ang mga pamamaraan sa OutputFormat ay tatawagan ng Pig sa parehong pamamaraan at sa parehong konteksto tulad ng sa pamamagitan ng Hadoop sa isang map-bawas na programa ng Java. Kung ang OutputFormat ay isang naka-package na Hadoop, dapat na gamitin ng pagpapatupad ang bagong batay sa API sa ilalim ng org.apache.hadoop.mapreduce. Kung ito ay isang pasadyang OutputFormat, dapat itong ipatupad gamit ang bagong API sa ilalim ng org.apache.hadoop.mapreduce. Ang paraan ng checkOutputSpecs () ng OutputFormat ay tatawagin ng baboy upang suriin ang lokasyon ng output sa harap. Ang pamamaraang ito ay tatawagan din bilang bahagi ng pagkakasunud-sunod ng tawag sa Hadoop kapag inilunsad ang trabaho. Kaya't dapat na matiyak ng mga pagpapatupad na ang pamamaraang ito ay maaaring tawaging maraming beses nang walang pare-pareho na mga epekto.

  • setStoreLocation ():

    Ang pamamaraang ito ay tinawag ng Pig upang ipaalam ang lokasyon ng tindahan sa nag-iimbak. Dapat gamitin ng storer ang pamamaraang ito upang maiparating ang parehong impormasyon sa pinagbabatayan na OutputFormat. Ang pamamaraang ito ay tinatawag na maraming beses ng Pig. Ang mga pagpapatupad ay dapat tandaan na ang pamamaraang ito ay tinatawag na maraming beses at dapat tiyakin na walang mga hindi pare-parehong epekto dahil sa maraming tawag.

  • ihandaToWrite ():

    Sa bagong API, ang pagsusulat ng data ay sa pamamagitan ng OutputFormat na ibinigay ng StoreFunc. Sa paghahandaToWrite () ang RecordWriter na nauugnay sa OutputFormat na ibinigay ng StoreFunc ay naipasa sa StoreFunc. Ang RecordWriter ay maaaring magamit ng pagpapatupad sa putNext () upang sumulat ng isang tuple na kumakatawan sa isang talaan ng data sa paraang inaasahan ng RecordWriter.

  • ilagaySunod ():

    Ang kahulugan ng putNext () ay hindi nagbago at tinawag ng Pig runtime upang isulat ang susunod na tuple ng data - sa bagong API, ito ang pamamaraan kung saan gagamitin ng pagpapatupad ang pinagbabatayan ng RecordWriter upang isulat ang Tuple.

Mga Default na Pagpapatupad sa StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Ang pamamaraang ito ay tatawagan ng Pig pareho sa front end at back end upang pumasa sa isang natatanging pirma sa Storer. Ang lagda ay maaaring magamit upang mag-imbak ng anumang impormasyon sa UDFContext kung saan kailangang iimbak ng Storer sa pagitan ng iba't ibang mga invocation ng pamamaraan sa front end at back end. Ang default na pagpapatupad sa StoreFunc ay may walang laman na katawan. Tatawagin ang pamamaraang ito bago ang anumang iba pang mga pamamaraan.

  • relToAbsPathForStoreLocation ():

    Tatawagan ng baboy runtime ang pamamaraang ito upang payagan ang Storer na i-convert ang isang lokasyon ng kamag-anak sa isang ganap na lokasyon. Ang isang pagpapatupad ay ibinigay sa StoreFunc na humahawak nito para sa mga lokasyon na batay sa FileSystem.

  • checkSchema ():

    Dapat na ipatupad ng isang function ng Store ang pagpapaandar na ito upang suriin na ang isang naibigay na iskema na naglalarawan sa data na isusulat ay katanggap-tanggap dito. Ang default na pagpapatupad sa StoreFunc ay may walang laman na katawan. Tatawagan ang pamamaraang ito bago ang anumang mga tawag upang itakda angStoreLocation ().

Halimbawa ng Pagpapatupad:

Ang pagpapatupad ng storer sa halimbawa, ay isang storer para sa data ng teksto na may linya na tagapaghatid bilang '
‘At‘ ‘bilang default na tagatanggal ng patlang (na maaaring ma-override sa pamamagitan ng pagpasa ng iba't ibang tagapaghatid ng patlang sa tagapagbuo) - ito ay katulad ng kasalukuyang tagapag-imbak ng PigStorage sa Pig. Gumagamit ang pagpapatupad ng isang mayroon nang suportadong Hadoop na OutputFormat - TextOutputFormat bilang pinagbabatayan na OutputFormat.

pampubliko na klase SimpleTextStorer nagpapalawak sa StoreFunc {protektado ng RecordWriter manunulat = null pribadong byte fieldDel = '' pribadong static panghuling int BUFFER_SIZE = 1024 pribadong static panghuling String UTF8 = 'UTF-8' pampublikong PigStorage () {} pampublikong PigStorage (String delimiter) {ito ( ) kung (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} iba pa kung (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: magtapon ng bagong RuntimeException (' Unknown delimiter '+ delimiter)}} iba pa {magtapon ng bagong RuntimeException (' PigStorage delimeter ay dapat na isang solong character ')}} ByteArrayOutputStream mOut = bagong ByteArrayOutputStream (BUFFER_SIZE) @Orrride public void putNext (Tuple f) ay nagtapon ng IOException {int sz = f.size () para sa (int i = 0 i

May tanong ba sa amin? Mangyaring banggitin ang mga ito sa seksyon ng mga komento at babalikan ka namin.

Mga Kaugnay na Post:



Apache Pig UDF: Bahagi 2
Apache Pig UDF: Bahagi 1