Apache Pig UDF: 3 dalis - parduotuvės funkcijos

Šiame įraše aprašoma apie „Apache Pig UDF“ parduotuvės funkcijas. (Apache Pig UDF: 3 dalis). Pažvelkite į „Apache Pig UDF“ parduotuvės funkcijas.

„StoreFunc“ abstrakčioje klasėje yra pagrindiniai duomenų saugojimo būdai, ir daugeliu atvejų tai turėtų pakakti jų išplėtimui. Yra papildoma sąsaja, kurią galima įdiegti norint išplėsti funkcionalumą:



„StoreMetadata“

Ši sąsaja turi metodus, kaip sąveikauti su metaduomenų sistemomis, kad būtų saugoma schema ir statistika. Ši sąsaja yra neprivaloma ir turėtų būti įdiegta tik tuo atveju, jei reikia saugoti metaduomenis.

Metodai, kuriuos reikia nepaisyti „StoreFunc“, yra paaiškinti toliau:

  • „getOutputFormat“ ():

    Šį metodą kiaulė iškvies, kad gautų „OutputFormat“, kurį naudoja sandėlininkas. „OutputFormat“ metodus Pig iškvies tuo pačiu būdu ir tame pačiame kontekste kaip ir Hadoopas, naudodamas „Java“ žemėlapį. Jei „OutputFormat“ yra „Hadoop“ paketas, diegimas turėtų naudoti naują API pagrindu esantį org.apache.hadoop.mapreduce. Jei tai yra pasirinktinis „OutputFormat“, jis turėtų būti įdiegtas naudojant naują API, esantį org.apache.hadoop.mapreduce. Kiaulė iškvies OutputFormat metodą checkOutputSpecs (), kad patikrintų išvesties vietą iš anksto. Šis metodas taip pat bus vadinamas Hadoop skambučių seka, kai bus paleista užduotis. Taigi įgyvendinimas turėtų užtikrinti, kad šį metodą būtų galima vadinti kelis kartus be nenuoseklių šalutinių poveikių.

  • setStoreLocation ():

    Šį metodą kiaulė ragina perduoti parduotuvės vietą saugotojui. Sandėlininkas turėtų naudoti šį metodą, kad tą pačią informaciją perduotų pagrindinei „OutputFormat“. Šį metodą Kiaulė vadina kelis kartus. Diegiant reikėtų atsižvelgti į tai, kad šis metodas yra vadinamas kelis kartus ir turėtų užtikrinti, kad dėl kelių skambučių nebūtų nenuoseklių šalutinių poveikių.

  • „pasiruošti“ ():

    Naujojoje API duomenys rašomi per „OutputFormat“, kurį teikia „StoreFunc“. „PreparToWrite“ () „RecordWriter“, susietas su „OutputFormat“, kurį teikia „StoreFunc“, perduodamas „StoreFunc“. Tuomet diegimas „putNext ()“ gali naudoti „RecordWriter“, kad būtų galima parašyti duomenų įrašą vaizduojantį rinkinį tokiu būdu, kokio tikisi „RecordWriter“.

  • „putNext“ ():

    „PutNext“ () reikšmė nepasikeitė ir „Pig“ vykdymo laikas paragino parašyti kitą duomenų rinkinį - naujojoje API tai metodas, kai diegimas naudos pagrindinį „RecordWriter“, kad išrašytų „Tuple“.

Numatytieji diegimai „StoreFunc“:

  • setStoreFuncUDFContextSignature ():

    Šį metodą kiaulė iškvies tiek priekyje, tiek gale, kad perduotų unikalų parašą Sandėlininkui. Parašas gali būti naudojamas bet kokiai informacijai saugoti „UDFContext“, kurią Sandėlininkas turi saugoti tarp įvairių metodų iškvietimų priekiniame ir galiniame galuose. Numatytasis „StoreFunc“ diegimo turinys yra tuščias. Šis metodas bus vadinamas prieš kitus metodus.

  • relToAbsPathForStoreLocation ():

    Kiaulės vykdymo laikas iškvies šį metodą, kad Sandėlininkas galėtų konvertuoti santykinę parduotuvės vietą į absoliučią vietą. „StoreFunc“ yra įdiegimas, kuris tvarko „FileSystem“ pagrįstas vietas.

  • checkSchema ():

    „Store“ funkcija turėtų įgyvendinti šią funkciją, kad patikrintų, ar tam tikra schema, apibūdinanti rašomus duomenis, yra jai priimtina. Numatytasis „StoreFunc“ diegimo turinys yra tuščias. Šis metodas bus iškviestas prieš skambinant į setStoreLocation ().

Įgyvendinimo pavyzdys:

Pavyzdyje pateiktas saugyklos diegimas yra tekstinių duomenų saugykla su eilutės ribotuvu „
‘Ir‘ ‘kaip numatytasis lauko ribotuvas (kuris gali būti pakeistas perduodant konstruktoriui kitą lauko ribotuvą) - tai panašu į dabartinį PigStorage saugyklą Pig. Diegimas naudoja esamą „Hadoop“ palaikomą „OutputFormat“ - „TextOutputFormat“ kaip pagrindinę „OutputFormat“.

viešoji klasė „SimpleTextStorer“ išplečia „StoreFunc“ {apsaugotas „RecordWriter“ rašytojas = niekinis privatus baitas fieldDel = '' privati ​​statinė galutinė int BUFFER_SIZE = 1024 privati ​​statinė galutinė eilutė UTF8 = 'UTF-8' viešoji „PigStorage“ () {} viešoji „PigStorage“ (eilutės ribotuvas) {tai ( ) if (delimiter.length () == 1) {this.fieldDel = (baitas) delimiter.charAt (0)} else if (delimiter.length ()> 1delimiter.charAt (0) == '') {switch ( delimiter.charAt (1)) {atvejis 't': this.fieldDel = (baitas) '' pertraukos atvejis 'x': fieldDel = Integer.valueOf (delimiter.substring (2), 16). u ': this.fieldDel = Integer.valueOf (delimiter.substring (2)). byteValue () pertrauka numatytasis: mesti naują RuntimeException (' Nežinomas atribiklis '+ atribiklis)}}} kitas {mesti naują RuntimeException (' PigStorage ribotuvas turi būti vienas simbolis ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Orride public void putNext (Tuple f) meta IOException {int sz = f.size () už (int i = 0 i

Turite mums klausimą? Prašau paminėti juos komentarų skiltyje ir mes su jumis susisieksime.

kaip mesti dvigubą int

Susijusios žinutės:

Apache Pig UDF: 2 dalis
Apache Pig UDF: 1 dalis