Apache Pig UDF: 2. daļa - slodzes funkcijas



Šajā ziņojumā ir aprakstīts par Apache Pig UDF - slodzes funkcijām. (Apache Pig UDF: 2. daļa). Apskatiet Apache Pig UDF ielādes funkcijas.

Šodienas ziņa ir par Apache Pig funkcijām Load. Šis ir filmas turpinājums pirmais ieraksts kas aptvēra tādas UDF funkcijas kā Eval, Filter un Aggregate. Lūdzu, atsaucieties uz viņiem, lai iegūtu vairāk informācijas par citām Pig UDF funkcijām.





Cūkas slodzes funkcija ir veidota virs Hadoop's InputFormat - klases, kuru Hadoop izmanto datu nolasīšanai. InputFormat ir divi mērķi: tas nosaka, kā ievade tiks sadrumstalota starp kartes uzdevumiem, un nodrošina RecordReader, kā rezultātā šo karšu uzdevumu ievadīšanai tiek izmantoti atslēgu un vērtību pāri. Slodzes funkcijas pamatklase ir LoadFunc.

Slodzes funkcija - klasifikācija:

LoadFunc abstraktajai klasei ir trīs galvenās datu ielādes metodes, un lielākajā daļā izmantošanas gadījumu būtu pietiekami to paplašināt. Ir trīs citas izvēles saskarnes, kuras var ieviest, lai sasniegtu paplašinātu funkcionalitāti:



  • LoadMetadata:

LoadMetadata ir metodes, kā tikt galā ar metadatiem. Lielākajai daļai iekrāvēju izpildes tas nav jāievieš, ja vien tie nav mijiedarbojušies ar metadatu sistēmu. Šīs saskarnes metode getSchema () piedāvā veidu, kā iekrāvēja implementācijas sazināties par datu shēmu atpakaļ Pig. Ja iekrāvēja ieviešana atgriež datus, kas sastāv no reālu tipu laukiem, tam jānodrošina shēma, kas apraksta datus, kas atgriezti, izmantojot metodi getSchema (). Pārējās metodes nodarbojas ar cita veida metadatiem, piemēram, nodalījuma atslēgām un statistiku. Ieviešana var atgriezt šo metožu nulles atgriešanās vērtības, ja tās nav derīgas citai ieviešanai.

  • LoadPushDown:

LoadPushDown ir dažādas metodes, kā virzīt operācijas no Pig izpildlaika uz iekrāvēja ieviešanu. Pašlaik Pig izsauc tikai metodi pushProjection (), lai sazinātos ar iekrāvēju, precīzus laukus, kas nepieciešami Pig skriptā. Ielādētāja ieviešana var izvēlēties izpildīt vai neievērot pieprasījumu. Ja iekrāvēja ieviešana nolemj izpildīt pieprasījumu, tai jāievieš LoadPushDown, lai uzlabotu vaicājuma veiktspēju.

  • pushProjection ():

Šī metode informē LoadFunc, kuri lauki ir nepieciešami Pig skriptā. Tādējādi LoadFunc ļauj uzlabot veiktspēju, ielādējot tikai nepieciešamos laukus. pushProjection () aizņem “requiredFieldList”. “requiredFieldList” ir tikai lasāms, un LoadFunc to nevar mainīt. ‘RequiredFieldList’ iekļauj ‘requiredField’ sarakstu, kur katrs ‘requiredField’ norāda lauku, kuru pieprasa skripts Pig, un to veido indekss, aizstājvārds, tips un apakšlauki. Cūka izmanto kolonnu indexFeldField.index, lai sazinātos ar LoadFunc par Pig skripta pieprasītajiem laukiem. Ja obligātais lauks ir karte, Pig nodos ‘requiredField.subFields’, kas satur to atslēgu sarakstu, kuras kartei nepieciešami Pig skripti.



informatica apmācība iesācējiem pdf bezmaksas lejupielāde
  • LoadCaster:

LoadCaster ir paņēmieni, kā baitu masīvus pārveidot noteiktos veidos. Ielādētāja ieviešanai tas būtu jāīsteno, kad ir jāatbalsta netieša vai tieša apraide no DataByteArray laukiem uz citiem veidiem.

LoadFunc abstraktā klase ir galvenā klase, kas jāpaplašina, lai ieviestu iekrāvēju. Metodes, kuras ir jāignorē, ir paskaidrotas turpmāk:

  • getInputFormat ():

    Šo metodi izsauc Cūka, lai iegūtu iekrāvēja izmantoto InputFormat. Metodes InputFormat izsauc Cūka tāpat kā Hadoop MapReduce Java programmā. Ja InputFormat ir Hadoop iepakots, ieviešanai jāizmanto jaunais API pamatā esošais org.apache.hadoop.mapreduce. Ja tas ir pielāgots InputFormat, labāk to ieviest, izmantojot jauno API org.apache.hadoop.mapreduce.

  • setLocation ():

    Šo metodi izsauc Cūka, lai paziņotu iekrāvējam kravas atrašanās vietu. Ielādētājam ir jāizmanto šī metode, lai to pašu informāciju paziņotu galvenajam InputFormat. Šo metodi cūka sauc vairākas reizes.

  • sagatavotToRead ():

    Šajā metodē RecordReader, kas saistīts ar LoadFunc sniegto InputFormat, tiek pārsūtīts uz LoadFunc. RecordReader tagad var izmantot getNext () ieviešana, lai atgrieztu kopu, kas atspoguļo datu ierakstu, Pig.

  • getNext ():

    GetNext () nozīme nav mainījusies, un Pig Runtime to izsauc, lai iegūtu nākamo datu kopu. Šajā metodē ieviešanai jāizmanto pamatā esošais RecordReader un jākonstruē atgriezeniskā saite.

Noklusējuma ieviešana LoadFunc:

Ņemiet vērā, ka LoadFunc noklusējuma ieviešana ir jāpārņem tikai nepieciešamības gadījumā.

projekta uzraudzības un kontroles plāns
  • setUdfContextSignature ():

    Šo metodi Cūka izsauks gan priekšpusē, gan aizmugurē, lai iekrāvējam nodotu unikālu parakstu. Parakstu var izmantot, lai UDFContext saglabātu jebkādu informāciju, kas iekrāvējam jāuzglabā starp dažādiem metožu izsaukumiem priekšējā un aizmugurējā daļā. Izmantošanas gadījums ir uzglabāt RequiredFieldList, kas tam nodots, vietnē LoadPushDown.pushProjection (RequiredFieldList) lietošanai aizmugurē, pirms atdodat virknes getNext (). LoadFunc noklusējuma ieviešanai ir tukšs pamatteksts. Šī metode tiks izsaukta pirms citām metodēm.

  • relatīvaisToAbsolutePath ():

    Cūku izpildlaiks izsauks šo metodi, lai ļautu iekrāvējam konvertēt relatīvo slodzes vietu absolūtā vietā. LoadFunc paredzēta noklusējuma ieviešana to apstrādā FileSystem atrašanās vietās. Ja ielādes avots ir kas cits, iekrāvēja ieviešana var izvēlēties to ignorēt.

Ielādētāja ieviešana piemērā ir teksta datu iekrāvējs ar līnijas atdalītāju kā ‘
‘Un’ ’kā noklusējuma lauku atdalītāji, kas līdzīgi pašreizējam PigStorage iekrāvējam Pig. Īstenošana kā esošo InputFormat izmanto esošo Hadoop atbalstīto Inputformat - TextInputFormat.

public class SimpleTextLoader paplašina LoadFunc {aizsargāts RecordReader in = null privāts baits fieldDel = '' private ArrayList mProtoTuple = null privāts TupleFactory mTupleFactory = TupleFactory.getInstance () private static final int BUFFER_SIZE = 1024 public SimpleTextLoader * ( Cūku iekrāvējs, kas kā lauka atdalītāju izmanto norādīto rakstzīmi. * * @param delimiter * viena baita rakstzīme, kas tiek izmantota lauku atdalīšanai. * ('' ir noklusējums.) * / public SimpleTextLoader (virknes atdalītājs) {this () if (norobežotājs.length () == 1) {this.fieldDel = (baits) delimiter.charAt (0)} else if ( norobežotājs.length ()> 1 & & norobežotājs.charAt (0) == '') {slēdzis (delimiter.charAt (1)) {gadījums 't': this.fieldDel = (baits) '' pārtraukuma gadījums 'x' : fieldDel = Integer.valueOf (norobežotājs.substring (2), 16) .byteValue () pārtraukuma gadījums 'u': this.fieldDel = Integer.valueOf (delimiter.substring (2)). byteValue () pārtraukuma noklusējums: mest jaunu RuntimeException ('Nezināms atdalītājs' + atdalītājs)}} else {mest jaunu RuntimeException ('PigStorage delimeter jābūt vienai rakstzīmei')}} @Orride public Tuple getNext () throws IOException {try {boolean notDone = in.nextKeyValue () if (notDone) {return null} Teksta vērtība = (Teksts) in.getCurrentValue () baits [] buf = value.getBytes () int len ​​= value.getLength () int start = 0 par (int i = 0 iVai mums ir jautājums? Lūdzu, pieminējiet to komentāru sadaļā, un mēs ar jums sazināsimies. 

Saistītās ziņas: