Apache Pig UDF: 3. del - Funkcije shranjevanja



Ta objava opisuje funkcijo Apache Pig UDF - Store. (Apache Pig UDF: 3. del). Oglejte si funkcije shranjevanja Apache Pig UDF.

V abstraktnem razredu StoreFunc so glavne metode za shranjevanje podatkov in v večini primerov bi moralo biti dovolj, da jih razširimo. Obstaja neobvezen vmesnik, ki ga je mogoče uporabiti za doseganje razširjene funkcionalnosti:





StoreMetadata

Ta vmesnik ima metode za interakcijo s sistemi metapodatkov za shranjevanje sheme in statistike. Ta vmesnik ni obvezen in ga je treba izvajati le, če je treba shraniti metapodatke.

Metode, ki jih je treba v storitvi StoreFunc preglasiti, so razložene spodaj:



  • getOutputFormat ():

    To metodo bo poklical Pig, da bo dobil OutputFormat, ki ga uporablja skladiščnik. Metode v OutputFormat bo Pig poklical na enak način in v enakem kontekstu kot Hadoop v programu Java za zmanjševanje zemljevidov. Če je OutputFormat paket Hadoop, mora implementacija uporabiti novega, ki temelji na API-ju pod org.apache.hadoop.mapreduce. Če gre za OutputFormat po meri, ga je treba implementirati z novim API-jem pod org.apache.hadoop.mapreduce. Metoda checkOutputSpecs () v OutputFormat bo poklicala prašič, da preveri izhodno lokacijo vnaprej. Ta metoda bo poklicana tudi kot del zaporedja klicev Hadoop, ko se opravilo zažene. Torej bi morale implementacije zagotoviti, da je to metodo mogoče večkrat poklicati brez neskladnih stranskih učinkov.

  • setStoreLocation ():

    To metodo Pig pokliče, da prodajalcu sporoči lokacijo trgovine. Skladiščnik bi moral uporabiti to metodo za sporočanje istih informacij osnovnemu OutputFormat. To metodo Pig večkrat pokliče. Pri izvedbah je treba upoštevati, da se ta metoda pokliče večkrat, in zagotoviti, da zaradi večkratnih klicev ne bo neskladnih stranskih učinkov.

  • prepaToWrite ():

    V novem API-ju je zapisovanje podatkov prek OutputFormat, ki ga nudi StoreFunc. V pripraviToWrite () se RecordWriter, povezan z OutputFormat, ki ga nudi StoreFunc, posreduje StoreFunc. RecordWriter lahko nato uporabi izvedba v putNext () za pisanje nabora, ki predstavlja zapis podatkov, na način, ki ga pričakuje RecordWriter.

  • putNext ():

    Pomen putNext () se ni spremenil in ga Pig runtime pokliče, da napiše naslednji sveženj podatkov - v novem API-ju je to metoda, pri kateri bo izvedba uporabila osnovni RecordWriter za zapisovanje Tuple-a.

Privzete izvedbe v StoreFunc:

  • setStoreFuncUDFContextSignature ():

    To metodo bo Pig poklical na sprednjem in zadnjem koncu, da bo posredoval unikatni podpis hrambi. Podpis lahko uporabite za shranjevanje kakršnih koli informacij v UDFContext, ki jih mora shraniti med različnimi klici metode na sprednjem in zadnjem koncu. Privzeta izvedba v StoreFunc ima prazno telo. Ta metoda bo poklicana pred drugimi metodami.

  • relToAbsPathForStoreLocation ():

    Izvedba prašiča bo poklicala to metodo, da bo shrambi omogočila pretvorbo relativne lokacije trgovine v absolutno lokacijo. V StoreFunc je na voljo izvedba, ki to obravnava za lokacije, ki temeljijo na FileSystem.

  • checkSchema ():

    Funkcija Store mora to funkcijo izvajati, da preveri, ali je določena shema, ki opisuje podatke, ki jih je treba zapisati, zanjo sprejemljiva. Privzeta izvedba v StoreFunc ima prazno telo. Ta metoda bo poklicana pred klici setStoreLocation ().

Primer izvedbe:

Izvedba shrambe v primeru je shramba za besedilne podatke z ločevalnikom vrstic kot '
‘In‘ ‘kot privzeti ločevalnik polja (ki ga je mogoče preglasiti tako, da se v konstruktor prenese drugačna ločila polja) - to je podobno trenutnemu shrambi PigStorage v Pig. Implementacija uporablja obstoječi podprti Hadoop OutputFormat - TextOutputFormat kot osnovni OutputFormat.

javni razred SimpleTextStorer razširja StoreFunc {zaščiten zapisovalnik zapisov = null zasebni bajt fieldDel = '' zasebni statični končni int BUFFER_SIZE = 1024 zasebni statični končni niz UTF8 = 'UTF-8' javni PigStorage () {} javni PigStorage (ločilo niza) {to ( ) if (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} else if (delimiter.length ()> 1delimiter.charAt (0) == '') {stikalo ( delimiter.charAt (1)) {case 't': this.fieldDel = (byte) '' break case 'x': fieldDel = Integer.valueOf (delimiter.substring (2), 16) .byteValue () case break ' u ': this.fieldDel = Integer.valueOf (delimiter.substring (2)). byteValue () break privzeto: vrzi novo RuntimeException (' Neznan ločilo '+ ločilo)}} else {vrzi nov RuntimeException (' Delimeter PigStorage mora biti en znak ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Override public void putNext (Tuple f) vrže IOException {int sz = f.size () for (int i = 0 i

Imate vprašanje za nas? Prosimo, da jih omenite v oddelku za komentarje, pa se vam bomo oglasili.

Sorodne objave:



Apache Pig UDF: 2. del
Apache Pig UDF: 1. del