Apache Pig UDF: 2. osa - laadimisfunktsioonid



Selles postituses kirjeldatakse Apache Pig UDF - laadimisfunktsioonide kohta. (Apache Pig UDF: 2. osa). Heitke pilk Apache Pig UDF-i laadimisfunktsioonidele.

Tänane postitus räägib Apache Pigi funktsioonidest Load. See on järg filmile esimene postitus mis hõlmas UDF-i funktsioone nagu Eval, Filter ja Aggregate. Pig UDFi muude funktsioonide kohta lisateabe saamiseks pöörduge nende poole.





Sea koormusfunktsioon on üles ehitatud Hadoopi InputFormati peale, klassi, mida Hadoop kasutab andmete lugemiseks. InputFormatil on kaks eesmärki: see määrab, kuidas sisend kaardil ülesannete vahel killustatakse, ja pakub RecordReaderi, mille tulemuseks on nende kaarditööde sisendiks võtmeväärtuste paarid. Laadimisfunktsiooni põhiklass on LoadFunc.

Koormusfunktsioon - klassifikatsioon:

LoadFunc abstraktsel klassil on andmete laadimiseks kolm peamist meetodit ja enamasti piisaks selle laiendamisest. Laiendatud funktsionaalsuse saavutamiseks saab rakendada veel kolme valikulist liidest:



kurk java seleeni veebidraiveri näide
  • LoadMetadata:

LoadMetadata-l on metaandmetega tegelemiseks meetodeid. Enamik laadurite käivitamist ei pea seda rakendama, kui nad ei reageeri metaandmete süsteemiga. Selle liidese meetod getSchema () pakub laadurite rakendustele viisi suhelda andmete skeemi kohta Pigile. Kui laadija juurutus tagastab reaalset tüüpi väljadest koosnevad andmed, peaks ta esitama skeemi, mis kirjeldab meetodi getSchema () kaudu tagastatud andmeid. Teised meetodid käsitlevad muud tüüpi metaandmeid, näiteks jaotusvõtmeid ja statistikat. Rakendused võivad tagastada nende meetodite nullväärtuse, kui need ei kehti teise juurutamise korral.

  • LoadPushDown:

LoadPushDownil on erinevad meetodid operatsioonide seadistamiseks seadmest Pig rakenduse laadimisrakendustesse. Praegu kutsub Pig laaduriga suhtlemiseks ainult meetodit pushProjection (), täpsete väljade jaoks, mida Pig-skript nõuab. Laaduri juurutus võib valida, kas järgida taotlust või mitte. Kui laaduri juurutamine otsustab taotlust järgida, peaks see rakendama päringu jõudluse parandamiseks rakendust LoadPushDown.

  • pushProjection ():

See meetod teavitab LoadFunci, millised väljad on Pig-skriptis kohustuslikud. Nii võimaldades LoadFuncil jõudlust parandada, laadides ainult vajalikud väljad. pushProjection () võtab 'requiredFieldList'. '' requiredFieldList 'on kirjutuskaitstud ja seda ei saa LoadFunc muuta. ‘RequiredFieldList’ sisaldab nimekirja ’requiredField’, kus iga ’requiredField’ tähistab Pig-skripti nõutavat välja ja koosneb indeksist, varjunimest, tüübist ja alaväljadest. Pig kasutab veeruindeksit requiredField.index, et suhelda LoadFunciga sigade skripti nõutavate väljade kohta. Kui kohustuslik väli on kaart, edastab Pig ‘requiredField.subFields’, mis sisaldab loendit võtmetest, mida kaardi jaoks vajavad Pig-skriptid.



  • LoadCaster:

LoadCasteril on tehnikad baitide massiivide teisendamiseks konkreetseteks tüüpideks. Laadija juurutus peaks selle rakendama, kui tuleb toetada kaudseid või otseseid ülekandeid väljadelt DataByteArray muud tüüpi.

Abstraktne klass LoadFunc on laaduri juurutamiseks laiendatav põhiklass. Allpool selgitatakse meetodid, millest tuleb loobuda.

  • getInputFormat ():

    Selle meetodi kutsub Pig, et saada laadija poolt kasutatav InputFormat. InputFormati meetodeid kutsub Pig samamoodi nagu Hadoop MapReduce Java programmis. Kui InputFormat on Hadoopi pakendatud, peaks juurutus kasutama uut API-põhist API-d org.apache.hadoop.mapreduce all. Kui see on kohandatud InputFormat, on parem rakendada uut API-d failis org.apache.hadoop.mapreduce.

  • setLocation ():

    Seda meetodit kutsub Pig, et laadijaga koorma asukoht edastada. Laadija peab seda meetodit kasutama sama teabe edastamiseks tuum InputFormati. Seda meetodit nimetab siga mitu korda.

  • preparToRead ():

    Selles meetodis edastatakse LoadFunciga pakutava InputFormati failiga seotud RecordReader LoadFuncile. RecordReaderit saab nüüd rakenduses getNext () kasutada andmete kirjet esindava sipuli tagastamiseks Pigile.

  • getNext ():

    GetNext () tähendus ei ole muutunud ja Pig runtime kutsub üles andmes järgmise tupeli omandama. Selle meetodi korral peaks juurutamine kasutama aluseks olevat RecordReaderit ja konstrueerima dupleksi tagastamiseks.

Vaikimisi rakendused LoadFuncis:

Pange tähele, et LoadFunci vaikerakendused tuleks tühistada ainult vajaduse korral.

kuidas kasutada sqlite brauserit
  • setUdfContextSignature ():

    Seda meetodit kutsub Pig nii eesmises kui ka tagumises otsas, et anda laadurile ainulaadne allkiri. Allkirja saab kasutada mis tahes teabe salvestamiseks UDFContext'i, mida laadur peab salvestama erinevate meetodite esilekutsumiste ja tagumiste osade vahel. Kasutamisjuhtumiks on talle edastatud RequiredFieldList'i salvestamine saidile LoadPushDown.pushProjection (RequiredFieldList), et see oleks tagatipuks kasutatav, enne kui saidid getNext () tagasi tagastavad. LoadFunci vaikerakendusel on tühi keha. Seda meetodit kutsutakse enne teisi meetodeid.

  • suhtelineToAbsolutePath ():

    Seadme käitusaeg kutsub seda meetodit lubama laaduril teisendada suhteline laadimiskoht absoluutseks. LoadFuncis pakutav vaikerakendus haldab seda FileSystemi asukohtade jaoks. Kui laadimisallikas on midagi muud, võib laadija juurutamine selle alistada.

Näites on laadija rakendus tekstiandmete laadija, mille rea eraldaja on ‘
‘Ja‘ ’vaikevälja eraldajana, mis on sarnane Pigi praeguse seadmega PigStorage. Rakendus kasutab alusena InputFormat olemasolevat Hadoopi toetatud Inputformat - TextInputFormat.

public class SimpleTextLoader laiendab LoadFunc {kaitstud RecordReader in = null privaatbaiti fieldDel = '' private ArrayList mProtoTuple = null privaatne TupleFactory mTupleFactory = TupleFactory.getInstance () private static final int BUFFER_SIZE = 1024 public SimpleTextLoader * (Public24 Sealaadur, mis kasutab välja eraldajana määratud märki. * * @param eraldaja * ühebaidine märk, mida kasutatakse väljade eraldamiseks. * ('' on vaikimisi.) * / public SimpleTextLoader (stringi eraldaja) {this () if (eraldaja.length () == 1) {this.fieldDel = (bait) delimiter.charAt (0)} else if ( eraldaja.length ()> 1 & & eraldaja.charAt (0) == '') {lüliti (eraldaja.charAt (1)) {juhtum 't': see.väliDel = (bait) '' murde juhtum 'x' : fieldDel = Integer.valueOf (eraldaja.substring (2), 16). byteValue () murde juhtum 'u': this.fieldDel = Integer.valueOf (delimiter.substring (2)). byteValue () murde vaikeväärtus: viska uus RuntimeException ('Tundmatu eraldaja' + eraldaja)}} else {heita uus RuntimeException ('PigStorage'i eraldusmõõtur peab olema üks märk')}} @ Avalda Tuple getNext () viska IOException {try {boolean notDone = in.nextKeyValue () if (notDone) {return null} Teksti väärtus = (Tekst) in.getCurrentValue () bait [] buf = value.getBytes () int len ​​= value.getLength () int start = 0 for (int i = 0 iKas teil on meile küsimus? Palun mainige seda kommentaaride jaotises ja võtame teiega ühendust. 

Seonduvad postitused: