Apache Pig UDF: 3. daļa - veikala funkcijas



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

StoreFunc abstraktajai klasei ir galvenās datu glabāšanas metodes, un lielākajā daļā gadījumu ar to vajadzētu pietikt, lai tos pagarinātu. Ir papildu saskarne, kuru var ieviest, lai sasniegtu paplašinātu funkcionalitāti:





StoreMetadata

Šajā saskarnē ir metodes, kā mijiedarboties ar metadatu sistēmām, lai saglabātu shēmu un statistiku. Šī saskarne nav obligāta, un tā jāievieš tikai tad, ja ir jāsaglabā metadati.

Tālāk ir paskaidrotas metodes, kuras StoreFunc ir jāignorē:



  • getOutputFormat ():

    Šo metodi izsauks Cūka, lai iegūtu krātuves izmantoto OutputFormat. Metodes programmā OutputFormat Cūka izsauks tādā pašā veidā un tādā pašā kontekstā kā Hadoop, izmantojot programmu Java samazināt ar karti. Ja OutputFormat ir Hadoop iepakots, ieviešanai jāizmanto jaunā API pamatā esošā API zem org.apache.hadoop.mapreduce. Ja tas ir pielāgots OutputFormat, tas jāievieš, izmantojot jauno API zem org.apache.hadoop.mapreduce. Cūka izsauks OutputFormat metodi checkOutputSpecs (), lai pārbaudītu izvades vietu augšpusē. Šī metode tiks izsaukta arī kā daļa no Hadoop zvanu secības, kad darbs tiks palaists. Tātad ieviešanai jānodrošina, ka šo metodi var izsaukt vairākas reizes bez pretrunīgām blakusparādībām.

  • setStoreLocation ():

    Šo metodi Cūka izsauc, lai paziņotu veikalam ar glabātāju. Glabātājam jāizmanto šī metode, lai to pašu informāciju paziņotu pamatā esošajai OutputFormat. Šo metodi Cūka sauc vairākas reizes. Īstenošanā jāņem vērā, ka šo metodi sauc vairākas reizes, un tai jānodrošina, ka vairāku zvanu dēļ nav pretrunīgu blakusparādību.

  • PreparToWrite ():

    Jaunajā API dati tiek ierakstīti, izmantojot OutputFormat, ko nodrošina StoreFunc. Programmā PreparToWrite () RecordWriter, kas saistīts ar OutputFormat, ko nodrošina StoreFunc, tiek nodots StoreFunc. Pēc tam ieviešana putNext () var izmantot RecordWriter, lai uzrakstītu datu kopu attēlojošu kopu tādā veidā, kā to paredz RecordWriter.

  • putNext ():

    PutNext () nozīme nav mainījusies, un Pig Runtime to izsauc, lai ierakstītu nākamo datu kopu - jaunajā API šī ir metode, kurā ieviešana izmantos pamatā esošo RecordWriter, lai izrakstītu Tuple.

Noklusējuma ieviešana StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Šo metodi Cūka izsauks gan priekšpusē, gan aizmugurē, lai nodotu glabātājam unikālu parakstu. Parakstu var izmantot, lai UDFContext saglabātu jebkādu informāciju, kas glabātājam jāuzglabā starp dažādiem metožu izsaukumiem priekšējā un aizmugurējā daļā. StoreFunc noklusējuma ieviešanā ir tukšs pamatteksts. Šī metode tiks izsaukta pirms citām metodēm.

  • relToAbsPathForStoreLocation ():

    Cūka izpildlaiks izsauks šo metodi, lai ļautu glabātājam konvertēt relatīvo veikala atrašanās vietu absolūtā vietā. Veikalā StoreFunc ir ieviesta ieviešana, kas to apstrādā vietnēm, kuru pamatā ir FileSystem.

  • checkSchema ():

    Funkcijai Veikals ir jāievieš šī funkcija, lai pārbaudītu, vai dotā shēma, kas apraksta rakstāmos datus, tai ir pieņemama. StoreFunc noklusējuma ieviešanā ir tukšs pamatteksts. Šī metode tiks izsaukta pirms jebkādiem izsaukumiem uz setStoreLocation ().

Īstenošanas piemērs:

Uzglabātāja ieviešana piemērā ir teksta datu krātuve ar līnijas atdalītāju “
‘Un’ ’kā noklusējuma lauka atdalītājs (ko var ignorēt, konstruktorā nododot citu lauka atdalītāju) - tas ir līdzīgi pašreizējam PigStorage glabātājam Pig. Īstenošana kā esošo OutputFormat izmanto esošo Hadoop atbalstīto OutputFormat - TextOutputFormat.

public class SimpleTextStorer paplašina StoreFunc {aizsargāts RecordWriter rakstītājs = null privāts baits fieldDel = '' private static final int BUFFER_SIZE = 1024 private static final String UTF8 = 'UTF-8' public PigStorage () {} public PigStorage (String delimiter) {this ( ) if (norobežotājs.length () == 1) {this.fieldDel = (baits) delimiter.charAt (0)} else if (delimiter.length ()> 1delimiter.charAt (0) == '') {switch ( delimiter.charAt (1)) {gadījums 't': this.fieldDel = (baits) '' pārtraukuma gadījums 'x': fieldDel = Integer.valueOf (delimiter.substring (2), 16). 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 else {mest jaunu RuntimeException (' PigStorage delimeter jābūt viena rakstzīme ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Override public void putNext (Tuple f) iemet IOException {int sz = f.size () for (int i = 0 i

Vai mums ir jautājums? Lūdzu, pieminējiet tos komentāru sadaļā, un mēs ar jums sazināsimies.

Saistītās ziņas:



Apache Pig UDF: 2. daļa
Apache Pig UDF: 1. daļa