Créer une transformation personnalisée - AWS Glue

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Créer une transformation personnalisée

Si vous avez besoin d'effectuer des transformations plus compliquées sur vos données ou si vous souhaitez ajouter des clés de propriété de données au jeu de données, vous pouvez ajouter une transformation Custom code (Code personnalisé) à votre diagramme de tâches. Le nœud de code personnalisé vous permet de saisir un script qui effectue la transformation.

Lorsque vous utilisez du code personnalisé, vous devez utiliser un éditeur de schéma pour indiquer les modifications apportées au résultat au travers du code personnalisé. Lorsque vous modifiez le schéma, vous pouvez exécuter les actions suivantes :

  • Ajouter ou supprimer des clés de propriété de données

  • Modifier le type de données des clés de propriété de données

  • Modifier le nom des clés de propriété de données

  • Restructurer une clé de propriété imbriquée

Vous devez utiliser une transformation SelectFromCollection pour choisir un seul DynamicFrame à partir du résultat de votre nœud de transformation personnalisé avant de pouvoir envoyer le résultat vers un emplacement cible.

Utilisez les tâches suivantes pour ajouter un nœud de transformation personnalisé à votre diagramme de tâches.

Ajout d'un nœud de transformation de code personnalisé au diagramme de tâche

Pour ajouter un nœud de transformation personnalisé à votre diagramme de tâche
  1. (Facultatif) Ouvrez le panneau Ressources, puis choisissez Transformation personnalisée pour ajouter une nouvelle transformation à votre diagramme de tâches.

  2. Sur la page Node properties (Propriétés de nœud) au cours de la tâche, saisissez un nom pour le nœud dans le diagramme de tâche. Si un parent de nœud n'est pas déjà sélectionné, ou si vous souhaitez plusieurs entrées pour la transformation personnalisée, choisissez un nœud dans la liste Node parents (Parents de nœud) à utiliser comme source pour la transformation.

Saisie du code pour le nœud de transformation personnalisé

Vous pouvez taper ou copier du code dans un champ de saisie. La tâche utilise ce code pour effectuer la transformation des données. Vous pouvez fournir un extrait de code Python ou Scala. Le code doit inclure un ou plusieurs DynamicFrames en entrée et retourne une collection de DynamicFrames.

Pour saisir le script d'un nœud de transformation personnalisé
  1. Lorsque le nœud de transformation personnalisé est sélectionné dans le diagramme de tâche, choisissez l'onglet Transform (Transformation).

  2. Dans le champ de saisie de texte sous l'en-tête Bloc de code, collez ou saisissez le code pour la transformation. Le code que vous utilisez doit correspondre au langage spécifié pour la tâche dans l'onglet Job details (Détails de la tâche).

    Lorsque vous faites référence aux nœuds d'entrée dans votre code, AWS Glue Studio nomme le DynamicFrames renvoyé par les nœuds du diagramme de tâche séquentiellement en fonction de l'ordre de création. Utilisez l'une des méthodes de dénomination suivantes dans votre code :

    • Génération de code classique – Utilisez des noms fonctionnels pour faire référence aux nœuds de votre diagramme de tâches.

      • Noeuds de source de données : DataSource0, DataSource1, DataSource2, etc.

      • Transform nodes : Transform0, Transform1, Transform2, etc.

    • Génération d'un nouveau code – Utilisez le nom spécifié dans l'onglet Node properties (Propriétés du nœud) d'un nœud, complété par « _node1 », « _node2 », etc. Par exemple S3bucket_node1, ApplyMapping_node2, S3bucket_node2, MyCustomNodeName_node1.

    Pour en savoir plus sur le nouveau générateur de code, consultez Génération de code de script.

Les exemples suivants montrent le format du code à saisir dans la zone de code :

Python

L'exemple suivant prend le premier DynamicFrame reçu, le convertit en DataFrame pour appliquer la méthode de filtre native (ne conservant que les enregistrements qui ont plus de 1000 votes), puis la convertit en un DynamicFrame avant de le retourner.

def FilterHighVoteCounts (glueContext, dfc) -> DynamicFrameCollection: df = dfc.select(list(dfc.keys())[0]).toDF() df_filtered = df.filter(df["vote_count"] > 1000) dyf_filtered = DynamicFrame.fromDF(df_filtered, glueContext, "filter_votes") return(DynamicFrameCollection({"CustomTransform0": dyf_filtered}, glueContext))
Scala

L'exemple suivant prend le premier DynamicFrame reçu, le convertit en DataFrame pour appliquer la méthode de filtre native (ne conservant que les enregistrements qui ont plus de 1000 votes), puis la convertit en un DynamicFrame avant de le retourner.

object FilterHighVoteCounts { def execute(glueContext : GlueContext, input : Seq[DynamicFrame]) : Seq[DynamicFrame] = { val frame = input(0).toDF() val filtered = DynamicFrame(frame.filter(frame("vote_count") > 1000), glueContext) Seq(filtered) } }

Modifier le schéma d'un nœud de transformation personnalisé

Lorsque vous utilisez un nœud de transformation personnalisé, AWS Glue Studio ne peut pas déduire automatiquement les schémas de sortie créés par la transformation. Vous utilisez l'éditeur de schéma pour décrire les modifications de schéma implémentées par le code de transformation personnalisé.

Un nœud de code personnalisé peut avoir n'importe quel nombre de nœuds parents, chacun fournissant un DynamicFrame comme source pour votre code personnalisé. Un nœud de code personnalisé renvoie un ensemble de DynamicFrames. Chaque DynamicFrame qui est utilisé comme entrée a un schéma associé. Vous devez ajouter un schéma qui décrit chaque DynamicFrame retourné par le nœud de code personnalisé.

Note

Lorsque vous définissez votre propre schéma sur une transformation personnalisée, AWS Glue Studio n'hérite pas de schémas des nœuds précédents. Pour mettre à jour le schéma, choisissez le nœud de transformation personnalisé, puis choisissez l'onglet d'aperçu des données. Une fois l'aperçu généré, choisissez « Use Preview Schema » (Utiliser le schéma d'aperçu). Le schéma sera ensuite remplacé par le schéma à l'aide de la prévisualisation des données.

Vous modifiez ici les schémas d'un nœud de transformation personnalisé
  1. Lorsque le nœud de transformation personnalisé est sélectionné dans le diagramme de tâche, dans le volet de détails du nœud, choisissez l'onglet Output Schema (Schéma de sortie).

  2. Choisissez Edit (Modifier) pour apporter des modifications au schéma.

    Si vous avez des clés de propriété de données imbriquées, telles qu'un tableau ou un objet, vous pouvez choisir l'icône Expand-Rows (Développez les lignes) ( A double-ended arrow pointing upwards and downwards between two parallel lines ) en haut à droite de chaque volet de schéma pour développer la liste des clés de propriété de données enfant. Une fois que vous avez sélectionné cette icône, elle devient Collapse-Rows (Réduire les lignes) ( Two arrows, one pointing up to a line and one pointing down to the same line ), que vous pouvez choisir de réduire la liste des clés de propriété enfants.

  3. Modifiez le schéma à l'aide des actions suivantes, dans la section à droite de la page :

    • Pour renommer une clé de propriété, placez le curseur dans la zone de texte Key (Clé) de la clé de propriété, puis saisissez le nouveau nom.

    • Pour modifier le type de données d'une clé de propriété, utilisez la liste pour choisir le nouveau type de données pour la clé de propriété.

    • Pour ajouter une nouvelle colonne de niveau supérieur au schéma, choisissez l'icône Overflow (Surcharger) ( An ellipsis (...) ) à droite du bouton Cancel (Annuler), puis choisissez Add root key (Ajouter une clé racine).

    • Pour ajouter une clé de propriété enfant au schéma, choisissez l'icône Add-Key (Ajouter une clé) A rectangle with a plus sign in the bottom left corner associée à la clé parent. Saisissez un nom pour la clé enfant et choisissez le type de données.

    • Pour supprimer une clé de propriété du schéma, choisissez l'icône Remove (Supprimer) ( An outline of a trash can ) à l'extrême droite du nom de la clé.

  4. Si votre code de transformation personnalisé utilise plusieurs DynamicFrames, vous pouvez ajouter d'autres schémas de sortie.

    • Pour ajouter un nouveau schéma vide, choisissez Overflow (Surcharger) ( An ellipsis (...) ), puis choisissez Add output schema (Ajouter un schéma de sortie).

    • Pour copier un schéma existant dans un nouveau schéma en sortie, assurez-vous que le schéma à copier est affiché dans le sélecteur de schéma. Choisissez l'icône Overflow (Surcharger) ( An ellipsis (...) ), puis choisissez Duplicate (Dupliquer).

    Si vous souhaitez supprimer un schéma en sortie, assurez-vous que le schéma que vous souhaitez copier est affiché dans le sélecteur de schéma. Choisissez l'icône Overflow (Surcharger) ( An ellipsis (...) ), puis choisissez Delete (Supprimer).

  5. Ajoutez de nouvelles clés racine au nouveau schéma ou modifiez les clés dupliquées.

  6. Lorsque vous modifiez les schémas en sortie, choisissez le bouton Apply (Appliquer) pour sauvegarder vos modifications et quitter l'éditeur de schéma.

    Si vous ne souhaitez pas enregistrer vos modifications, choisissez le bouton Cancel (Annuler).

Configurer la sortie de transformation personnalisée

Une transformation de code personnalisée renvoie une collection de DynamicFrames, même s'il n'y a qu'un seul DynamicFrame dans le jeu de résultats.

Pour traiter la sortie à partir d'un nœud de transformation personnalisé
  1. Ajout d'une transformation SelectFromCollection, qui a pour nœud parent le nœud de transformation personnalisé. Mettez à jour cette transformation pour indiquer le jeu de données que vous souhaitez utiliser. Pour plus d'informations, consultez Utilisation de SelectFromCollection pour choisir le jeu de données à conserver.

  2. Ajoutez d'autres transformations SelectFromCollection au diagramme de tâches si vous souhaitez utiliser des DynamicFrames produits par le nœud de transformation personnalisé.

    Considérez un scénario dans lequel vous ajoutez un nœud de transformation personnalisé pour diviser un jeu de données de vol en plusieurs jeux de données, mais dupliquez certaines des clés de propriété d'identification dans chaque schéma en sortie, telles que la date de vol ou le numéro de vol. Vous ajoutez un nœud de transformation SelectFromCollection pour chaque schéma de sortie, avec le nœud de transformation personnalisé comme parent.

  3. (Facultatif) Vous pouvez ensuite utiliser chaque SelectFromCollection en tant que source pour d'autres nœuds de la tâche, ou en tant que parent pour un nœud de données cible.