Apache Pig UDF: Partie 3 - Fonctions de magasin

Cet article décrit Apache Pig UDF - Fonctions de magasin. (Apache Pig UDF: Partie 3). Jetez un œil aux fonctions de magasin d'Apache Pig UDF.



La classe abstraite StoreFunc a les principales méthodes de stockage des données et pour la plupart des cas d'utilisation, il devrait suffire de l'étendre. Il existe une interface optionnelle qui peut être implémentée pour obtenir des fonctionnalités étendues:



MagasinMetadata

Cette interface a des méthodes pour interagir avec les systèmes de métadonnées pour stocker le schéma et les statistiques. Cette interface est facultative et ne doit être mise en œuvre que si les métadonnées doivent être stockées.

pmi-acp vaut le coup

Les méthodes qui doivent être remplacées dans StoreFunc sont expliquées ci-dessous:



  • getOutputFormat ():

    Cette méthode sera appelée par Pig pour obtenir le OutputFormat utilisé par le Storer. Les méthodes du OutputFormat seront appelées par Pig de la même manière et dans le même contexte que par Hadoop dans un programme Java map-reduction. Si OutputFormat est un package Hadoop, l'implémentation doit utiliser la nouvelle API basée sur org.apache.hadoop.mapreduce. S'il s'agit d'un OutputFormat personnalisé, il doit être implémenté à l'aide de la nouvelle API sous org.apache.hadoop.mapreduce. La méthode checkOutputSpecs () de OutputFormat sera appelée par pig pour vérifier l'emplacement de sortie à l'avance. Cette méthode sera également appelée dans le cadre de la séquence d'appels Hadoop lorsque le travail est lancé. Les implémentations doivent donc garantir que cette méthode peut être appelée plusieurs fois sans effets secondaires incohérents.

  • setStoreLocation ():

    Cette méthode est appelée par Pig pour communiquer l'emplacement du magasin au stockeur. Le stockeur doit utiliser cette méthode pour communiquer les mêmes informations au OutputFormat sous-jacent. Cette méthode est appelée plusieurs fois par Pig. Les implémentations doivent prendre note que cette méthode est appelée plusieurs fois et doivent garantir qu'il n'y a pas d'effets secondaires incohérents en raison des appels multiples.

  • prepareToWrite ():

    Dans la nouvelle API, l'écriture des données se fait via le OutputFormat fourni par StoreFunc. Dans prepareToWrite (), le RecordWriter associé au OutputFormat fourni par le StoreFunc est passé au StoreFunc. Le RecordWriter peut ensuite être utilisé par l'implémentation dans putNext () pour écrire un tuple représentant un enregistrement de données d'une manière attendue par RecordWriter.

  • putNext ():

    La signification de putNext () n'a pas changé et est appelée par le runtime Pig pour écrire le prochain tuple de données - dans la nouvelle API, c'est la méthode dans laquelle l'implémentation utilisera le RecordWriter sous-jacent pour écrire le Tuple.

Implémentations par défaut dans StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Cette méthode sera appelée par Pig à la fois dans le front-end et le back-end pour transmettre une signature unique au Storer. La signature peut être utilisée pour stocker toute information dans le UDFContext que le Storer a besoin de stocker entre diverses invocations de méthode dans le front-end et le back-end. L'implémentation par défaut dans StoreFunc a un corps vide. Cette méthode sera appelée avant toute autre méthode.

  • relToAbsPathForStoreLocation ():

    Le runtime Pig appellera cette méthode pour permettre au Storer de convertir un emplacement de magasin relatif en un emplacement absolu. Une implémentation est fournie dans StoreFunc qui gère cela pour les emplacements basés sur FileSystem.

  • checkSchema ():

    Une fonction Store doit implémenter cette fonction pour vérifier qu'un schéma donné décrivant les données à écrire est acceptable pour elle. L'implémentation par défaut dans StoreFunc a un corps vide. Cette méthode sera appelée avant tout appel à setStoreLocation ().

Exemple de mise en œuvre:

L’implémentation du stockage dans l’exemple est un stockage pour les données texte avec un délimiteur de ligne comme ‘
'Et' 'comme délimiteur de champ par défaut (qui peut être remplacé en passant un autre délimiteur de champ dans le constructeur) - ceci est similaire au stockage PigStorage actuel dans Pig. L'implémentation utilise un OutputFormat pris en charge par Hadoop - TextOutputFormat comme OutputFormat sous-jacent.

public class SimpleTextStorer étend StoreFunc {protected RecordWriter writer = null private byte fieldDel = '' private static final int BUFFER_SIZE = 1024 private static final String UTF8 = 'UTF-8' public PigStorage () {} public PigStorage (String delimiter) {this ( ) if (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} else if (delimiter.length ()> 1delimiter.charAt (0) == '') {switch ( delimiter.charAt (1)) {case 't': this.fieldDel = (octet) '' break case 'x': fieldDel = Integer.valueOf (delimiter.substring (2), 16) .byteValue () break case ' u ': this.fieldDel = Integer.valueOf (delimiter.substring (2)). byteValue () break default: throw new RuntimeException (' Unknown delimiter '+ delimiter)}} else {throw new RuntimeException (' PigStorage delimeter must be a caractère unique ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Override public void putNext (Tuple f) jette IOException {int sz = f.size () for (int i = 0 i

Vous avez une question pour nous? Veuillez les mentionner dans la section commentaires et nous vous recontacterons.

Articles Similaires:



Apache Pig UDF: Partie 2
Apache Pig UDF: Partie 1