

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.

# Programmez les scripts ETL AWS Glue dans PySpark
<a name="aws-glue-programming-python"></a>

Vous pouvez trouver des exemples de code Python et des utilitaires pour AWS Glue dans le [référentiel d'échantillons AWS Glue](https://github.com/awslabs/aws-glue-samples) sur le GitHub site Web.

## Utiliser Python avec AWS Glue
<a name="aws-glue-programming-python-using"></a>

AWS Glue prend en charge une extension du dialecte PySpark Python pour les tâches d'extraction, de transformation et de chargement (ETL) par script. Cette section décrit comment utiliser Python dans les scripts ETL et avec l'API AWS Glue.
+ [Configuration d'utilisation de Python avec AWS Glue](aws-glue-programming-python-setup.md)
+ [Appeler AWS Glue APIs en Python](aws-glue-programming-python-calling.md)
+ [Utiliser les bibliothèques Python avec AWS Glue](aws-glue-programming-python-libraries.md)
+ [Exemples de code Python AWS Glue](aws-glue-programming-python-samples.md)

## AWS PySpark Extensions Glue
<a name="aws-glue-programming-python-extensions-list"></a>

AWS Glue a créé les extensions suivantes pour le dialecte PySpark Python.
+ [Accès aux paramètres à l'aide de `getResolvedOptions`](aws-glue-api-crawler-pyspark-extensions-get-resolved-options.md)
+ [PySpark types d'extensions](aws-glue-api-crawler-pyspark-extensions-types.md)
+ [DynamicFrame classe](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md)
+ [DynamicFrameCollection classe](aws-glue-api-crawler-pyspark-extensions-dynamic-frame-collection.md)
+ [DynamicFrameWriter classe](aws-glue-api-crawler-pyspark-extensions-dynamic-frame-writer.md)
+ [DynamicFrameReader classe](aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader.md)
+ [GlueContext classe](aws-glue-api-crawler-pyspark-extensions-glue-context.md)

## AWS Glue PySpark transforme
<a name="aws-glue-programming-python-transforms-list"></a>

AWS Glue a créé les classes de transformation suivantes à utiliser dans les opérations PySpark ETL.
+ [GlueTransform classe de base](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md)
+ [ApplyMapping classe](aws-glue-api-crawler-pyspark-transforms-ApplyMapping.md)
+ [DropFields classe](aws-glue-api-crawler-pyspark-transforms-DropFields.md)
+ [DropNullFields classe](aws-glue-api-crawler-pyspark-transforms-DropNullFields.md)
+ [ErrorsAsDynamicFrame classe](aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame.md)
+ [FillMissingValues classe](aws-glue-api-crawler-pyspark-transforms-fillmissingvalues.md)
+ [Classe Filter](aws-glue-api-crawler-pyspark-transforms-filter.md)
+ [FindIncrementalMatches classe](aws-glue-api-crawler-pyspark-transforms-findincrementalmatches.md)
+ [FindMatches classe](aws-glue-api-crawler-pyspark-transforms-findmatches.md)
+ [FlatMap classe](aws-glue-api-crawler-pyspark-transforms-flat-map.md)
+ [Classe Join](aws-glue-api-crawler-pyspark-transforms-join.md)
+ [Classe Map](aws-glue-api-crawler-pyspark-transforms-map.md)
+ [MapToCollection classe](aws-glue-api-crawler-pyspark-transforms-MapToCollection.md)
+ [mergeDynamicFrame](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-merge)
+ [Classe Relationalize](aws-glue-api-crawler-pyspark-transforms-Relationalize.md)
+ [RenameField classe](aws-glue-api-crawler-pyspark-transforms-RenameField.md)
+ [ResolveChoice classe](aws-glue-api-crawler-pyspark-transforms-ResolveChoice.md)
+ [SelectFields classe](aws-glue-api-crawler-pyspark-transforms-SelectFields.md)
+ [SelectFromCollection classe](aws-glue-api-crawler-pyspark-transforms-SelectFromCollection.md)
+ [Classe Spigot](aws-glue-api-crawler-pyspark-transforms-spigot.md)
+ [SplitFields classe](aws-glue-api-crawler-pyspark-transforms-SplitFields.md)
+ [SplitRows classe](aws-glue-api-crawler-pyspark-transforms-SplitRows.md)
+ [Classe Unbox](aws-glue-api-crawler-pyspark-transforms-Unbox.md)
+ [UnnestFrame classe](aws-glue-api-crawler-pyspark-transforms-UnnestFrame.md)

# Configuration d'utilisation de Python avec AWS Glue
<a name="aws-glue-programming-python-setup"></a>

Utilisez Python pour développer vos scripts ETL pour les tâches Spark. Les versions Python prises en charge pour les tâches ETL dépendent de la version AWS Glue de la tâche. Pour plus d'informations sur les versions AWS Glue, consultez [Glue version job property](add-job.md#glue-version-table).

**Pour configurer votre système pour l'utilisation de Python avec AWS Glue**

Suivez ces étapes pour installer Python et pour pouvoir invoquer le AWS Glue APIs. 

1. Si vous n'avez pas déjà Python installé, téléchargez et installez-le [à partir de la page de téléchargement Python.org ](https://www.python.org/downloads/).

1. Installez le AWS Command Line Interface (AWS CLI) comme indiqué dans la [documentation de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/installing.html).

   Le n' AWS CLI est pas directement nécessaire pour utiliser Python. Cependant, son installation et sa configuration constituent un moyen pratique de le configurer à l' AWS aide des informations d'identification de votre compte et de vérifier qu'elles fonctionnent.

1. Installez le AWS SDK pour Python (Boto 3), comme indiqué dans le guide de démarrage rapide de [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html).

    APIs Les ressources Boto 3 ne sont pas encore disponibles pourAWS Glue. Actuellement, seul le client Boto 3 APIs peut être utilisé.

   Pour en savoir plus sur Boto 3, consultez [Mise en route du kit SDK AWS for Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html).

Vous pouvez trouver des exemples de code Python et des utilitaires AWS Glue dans le [référentiel d'AWS Glueexemples](https://github.com/awslabs/aws-glue-samples) du site GitHub Web.

# Appeler AWS Glue APIs en Python
<a name="aws-glue-programming-python-calling"></a>

Notez que les ressources Boto 3 ne APIs sont pas encore disponibles pourAWS Glue. Actuellement, seul le client Boto 3 APIs peut être utilisé.

## Noms d'API AWS Glue dans Python
<a name="aws-glue-programming-python-calling-names"></a>

AWS Les noms des API Glue en Java et dans d'autres langages de programmation sont généralement CamelCased. Cependant, lors d'un appel à partir de Python, ces noms génériques sont modifiés en minuscules, avec les différentes parties du nom séparées par des traits de soulignement afin de les rendre plus proches du langage Python. Dans la documentation de [AWS Glue API](aws-glue-api.md) référence, ces noms pythoniques sont listés entre parenthèses après les noms génériques CamelCased .

Cependant, même si les noms d'API AWS Glue eux-mêmes sont transformés en minuscules, leurs noms de paramètres restent en majuscule. Il est important de s'en souvenir, car les paramètres doivent être transmis par leur nom lors de l'appel AWS Glue APIs, comme décrit dans la section suivante.

## Transmission de paramètres Python et accès à ces paramètres dans AWS Glue
<a name="aws-glue-programming-python-calling-parameters"></a>

Dans les appels Python à AWS Glue APIs, il est préférable de transmettre les paramètres explicitement par leur nom. Par exemple :

```
job = glue.create_job(Name='sample', Role='Glue_DefaultRole',
                      Command={'Name': 'glueetl',
                               'ScriptLocation': 's3://my_script_bucket/scripts/my_etl_script.py'})
```

Il est utile de comprendre que Python crée un dictionnaire des name/value tuples que vous spécifiez comme arguments d'un script ETL dans un [Structure Job](aws-glue-api-jobs-job.md#aws-glue-api-jobs-job-Job) ou[JobRun structure](aws-glue-api-jobs-runs.md#aws-glue-api-jobs-runs-JobRun). Boto 3 les transmet à AWS Glue au format JSON par le biais d'un appel d'API REST. Cela signifie que vous ne pouvez pas vous fier à l'ordre des arguments lorsque vous y accédez dans votre script.

Par exemple, supposons que vous lanciez un `JobRun` dans un gestionnaire Lambda Python, et que vous souhaitiez spécifier plusieurs paramètres. Votre code peut alors se présenter comme suit :

```
from datetime import datetime, timedelta

client = boto3.client('glue')

def lambda_handler(event, context):
  last_hour_date_time = datetime.now() - timedelta(hours = 1)
  day_partition_value = last_hour_date_time.strftime("%Y-%m-%d")
  hour_partition_value = last_hour_date_time.strftime("%-H")

  response = client.start_job_run(
               JobName = 'my_test_Job',
               Arguments = {
                 '--day_partition_key':   'partition_0',
                 '--hour_partition_key':  'partition_1',
                 '--day_partition_value':  day_partition_value,
                 '--hour_partition_value': hour_partition_value } )
```

Pour accéder à ces paramètres de manière fiable dans votre script ETL, spécifiez-les par nom à l'aide de la fonction AWS Glue `getResolvedOptions` et accédez-y depuis le dictionnaire obtenu :

```
import sys
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv,
                          ['JOB_NAME',
                           'day_partition_key',
                           'hour_partition_key',
                           'day_partition_value',
                           'hour_partition_value'])
print "The day partition key is: ", args['day_partition_key']
print "and the day partition value is: ", args['day_partition_value']
```

Si vous souhaitez transmettre un argument qui est une chaîne JSON imbriquée, pour préserver la valeur du paramètre lorsqu'elle est transmise à votre tâche ETL AWS Glue, vous devez coder la chaîne de paramètre avant de démarrer l'exécution de la tâche, puis décoder la chaîne de paramètre avant de la référencer votre script de tâche. Prenons l'exemple de la la chaîne d'arguments suivante :

```
glue_client.start_job_run(JobName = "gluejobname", Arguments={
"--my_curly_braces_string": '{"a": {"b": {"c": [{"d": {"e": 42}}]}}}'
})
```

Pour transférer ce paramètre correctement, vous devez coder l'argument sous la forme d'une chaîne codée en Base64.

```
import base64
...
sample_string='{"a": {"b": {"c": [{"d": {"e": 42}}]}}}'
sample_string_bytes = sample_string.encode("ascii")

base64_bytes = base64.b64encode(sample_string_bytes) 
base64_string = base64_bytes.decode("ascii") 
...
glue_client.start_job_run(JobName = "gluejobname", Arguments={
"--my_curly_braces_string": base64_bytes})
...
sample_string_bytes = base64.b64decode(base64_bytes) 
sample_string = sample_string_bytes.decode("ascii") 
print(f"Decoded string: {sample_string}") 
...
```

## Exemple : Créer et exécuter une tâche
<a name="aws-glue-programming-python-calling-example"></a>

L'exemple suivant montre comment appeler le à AWS Glue APIs l'aide de Python pour créer et exécuter une tâche ETL.

**Pour créer et exécuter une tâche**

1. Créez une instance du client AWS Glue :

   ```
   import boto3
   glue = boto3.client(service_name='glue', region_name='us-east-1',
                 endpoint_url='https://glue.us-east-1.amazonaws.com')
   ```

1. Crée une tâche. Vous devez utiliser `glueetl` comme nom de la commande ETL, comme indiqué dans le code suivant :

   ```
   myJob = glue.create_job(Name='sample', Role='Glue_DefaultRole',
                             Command={'Name': 'glueetl',
                                      'ScriptLocation': 's3://my_script_bucket/scripts/my_etl_script.py'})
   ```

1. Démarrez une nouvelle exécution de la tâche que vous avez créée dans l'étape précédente :

   ```
   myNewJobRun = glue.start_job_run(JobName=myJob['Name'])
   ```

1. Obtenez l'état de la tâche :

   ```
   status = glue.get_job_run(JobName=myJob['Name'], RunId=myNewJobRun['JobRunId'])
   ```

1. Affichez l'état actuel de l'exécution de la tâche :

   ```
   print(status['JobRun']['JobRunState'])
   ```

# Utiliser les bibliothèques Python avec AWS Glue
<a name="aws-glue-programming-python-libraries"></a>

 Vous pouvez installer des modules et bibliothèques Python supplémentaires à utiliser avec AWS Glue ETL. Pour AWS Glue 2.0 et versions ultérieures, AWS Glue utilise le Python Package Installer (pip3) pour installer les modules supplémentaires utilisés par AWS Glue ETL. AWS Glue propose plusieurs options pour intégrer les modules Python supplémentaires à votre environnement de travail AWS Glue. Vous pouvez utiliser ce `--additional-python-modules` paramètre pour intégrer de nouveaux modules à l'aide de fichiers zip contenant des roues Python groupées (également appelées « zip of wheels », disponibles pour AWS Glue 5.0 et versions ultérieures), des fichiers de roues Python individuels, des fichiers d'exigences (requirements.txt, disponible pour AWS Glue 5.0 et versions ultérieures) ou une liste de modules Python séparés par des virgules. Il peut également être utilisé pour modifier la version des modules python fournis dans l'environnement AWS Glue (voir [Modules Python déjà fournis dans AWS Glue](#glue-modules-provided) pour plus de détails). 

**Topics**
+ [Installation de modules Python supplémentaires avec pip dans AWS Glue 2.0 ou version ultérieure](#addl-python-modules-support)
+ [Y compris des fichiers Python dotés de fonctionnalités PySpark natives](#extra-py-files-support)
+ [Scripts de programmation utilisant des transformations visuelles](#aws-glue-programming-with-cvt)
+ [Compression de bibliothèques pour intégration](#aws-glue-programming-python-libraries-zipping)
+ [Chargement de bibliothèques Python dans les blocs-notes AWS Glue Studio](#aws-glue-programming-python-libraries-notebooks)
+ [Chargement de bibliothèques Python dans un endpoint de développement dans AWS Glue 0.9/1.0](#aws-glue-programming-python-libraries-dev-endpoint)
+ [Utilisation de bibliothèques Python dans une tâche ou JobRun](#aws-glue-programming-python-libraries-job)
+ [Analyse proactive des dépendances Python](#aws-glue-programming-analyzing-python-dependencies)
+ [Modules Python déjà fournis dans AWS Glue](#glue-modules-provided)
+ [Annexe A : Création d'un artefact Zip of Wheels](#glue-python-library-zip-of-wheels-appendix)
+ [Annexe B : Détails de l'environnement AWS Glue](#glue-python-libraries-environment-details)

## Installation de modules Python supplémentaires avec pip dans AWS Glue 2.0 ou version ultérieure
<a name="addl-python-modules-support"></a>

AWS Glue utilise le Python Package Installer (pip3) pour installer des modules supplémentaires qui seront utilisés par AWS Glue ETL. Vous pouvez utiliser le paramètre `--additional-python-modules` avec une liste de modules Python séparés par des virgules pour ajouter un nouveau module ou modifier la version d'un module existant. Vous pouvez installer des artefacts de roue intégrés via un zip de roues ou un artefact de roue autonome en téléchargeant le fichier sur Amazon S3, puis en incluant le chemin d'accès à l'objet Amazon S3 dans votre liste de modules. Pour plus d'informations sur la définition des paramètres des tâches, consultez la section [Utilisation des paramètres des tâches dans les tâches AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html).

 Vous pouvez transmettre des options supplémentaires à pip3 à l'aide du paramètre `--python-modules-installer-option`. Par exemple, vous pouvez passer `--only-binary` pour forcer pip à installer uniquement des artefacts prédéfinis pour les packages spécifiés par. `--additional-python-modules` Pour plus d'exemples, voir [Création de modules Python à partir d'une roue pour les charges de travail Spark ETL à l'aide de AWS Glue 2.0](https://aws.amazon.com/blogs/big-data/building-python-modules-from-a-wheel-for-spark-etl-workloads-using-aws-glue-2-0/). 

### Meilleures pratiques pour la gestion des dépendances en Python
<a name="glue-python-library-best-practices"></a>

Pour les charges de travail de production, AWS Glue recommande de regrouper toutes vos dépendances Python sous forme de fichiers de roue dans un seul artefact zip. Cette approche permet de :
+ **Exécution déterministe** : contrôle précis des versions de package installées
+ **Fiabilité** : aucune dépendance à l'égard des référentiels de packages externes lors de l'exécution de la tâche
+ **Performances** : opération de téléchargement unique au lieu de plusieurs appels réseau
+ **Installation hors ligne** : fonctionne dans des environnements VPC privés sans accès à Internet

#### Importantes considérations
<a name="glue-python-library-important-considerations"></a>

Dans le cadre du [modèle de responsabilitéAWS partagée](https://aws.amazon.com/compliance/shared-responsibility-model/), vous êtes responsable de la gestion des modules Python supplémentaires, des bibliothèques et de leurs dépendances. Cela inclut notamment les éléments suivants :
+ **Mises à jour de sécurité** : mise à jour régulière des packages pour corriger les failles de sécurité
+ **Compatibilité des versions** : assurez-vous que les packages sont compatibles avec votre version de AWS Glue
+ **Tests** : vérifier que vos dépendances packagées fonctionnent correctement dans l'environnement Glue

Si vos dépendances sont minimes, vous pouvez envisager d'utiliser des fichiers de roue individuels à la place.

### (Recommandé) Installation de bibliothèques Python supplémentaires dans AWS Glue 5.0 ou version ultérieure à l'aide de Zip of Wheels
<a name="glue-python-library-installing-zip-of-wheels"></a>

AWS Glue 5.0 et versions ultérieures permettent de regrouper plusieurs fichiers de roues dans un seul artefact zip contenant des roues Python groupées pour une gestion des dépendances plus fiable et déterministe. Pour utiliser cette approche, créez un fichier zip contenant toutes vos dépendances relatives aux roues et leurs dépendances transitives avec le `.gluewheels.zip` suffixe, chargez-le sur Amazon S3 et référencez-le à l'aide du `--additional-python-modules` paramètre. Assurez-vous d'ajouter `--no-index` au paramètre de `--python-modules-installer-option` tâche. Avec cette configuration, le fichier zip of wheels agit essentiellement comme un index local permettant à pip de résoudre les dépendances au moment de l'exécution. Cela élimine les dépendances vis-à-vis des référentiels de packages externes tels que PyPI lors de l'exécution des tâches, offrant ainsi une stabilité et une cohérence accrues pour les charges de travail de production. Par exemple : 

```
--additional-python-modules s3://amzn-s3-demo-bucket/path/to/zip-of-wheels-1.0.0.gluewheels.zip
--python-modules-installer-option --no-index
```

Pour obtenir des instructions sur la création d'un fichier zip de roues, voir[Annexe A : Création d'un artefact Zip of Wheels](#glue-python-library-zip-of-wheels-appendix).

### Installation de bibliothèques Python supplémentaires à l’aide de Wheel
<a name="glue-python-library-installing-wheel"></a>

AWS Glue prend en charge l'installation de packages Python personnalisés à l'aide de fichiers wheel (.whl) stockés dans Amazon S3. Pour inclure des fichiers de roues dans vos tâches AWS Glue, fournissez une liste séparée par des virgules de vos fichiers de roues stockés dans s3 dans le paramètre de `--additional-python-modules` tâche. Par exemple : 

```
--additional-python-modules s3://amzn-s3-demo-bucket/path/to/package-1.0.0-py3-none-any.whl,s3://your-bucket/path/to/another-package-2.1.0-cp311-cp311-linux_x86_64.whl
```

Cette approche est également utile lorsque vous avez besoin de distributions personnalisées ou de packages avec des dépendances natives précompilés pour le système d’exploitation approprié. Pour plus d'exemples, voir [Création de modules Python à partir d'une roue pour les charges de travail Spark ETL à l'aide de AWS Glue 2.0](https://aws.amazon.com/blogs/big-data/building-python-modules-from-a-wheel-for-spark-etl-workloads-using-aws-glue-2-0/). 

### Installation de bibliothèques Python supplémentaires dans AWS Glue 5.0 ou version ultérieure à l'aide de requirements.txt
<a name="addl-python-modules-requirements-txt"></a>

Dans AWS Glue 5.0\$1, vous pouvez fournir le standard de facto `requirements.txt` pour gérer les dépendances des bibliothèques Python. Pour ce faire, indiquez les deux paramètres de tâche suivants :
+ Clé : `--python-modules-installer-option`

  Valeur : `-r`
+ Clé : `--additional-python-modules`

  Valeur : `s3://path_to_requirements.txt`

AWS Les nœuds Glue 5.0 chargent initialement les bibliothèques python spécifiées dans`requirements.txt`.

Voici un exemple de requirements.txt :

```
awswrangler==3.9.1
elasticsearch==8.15.1
PyAthena==3.9.0
PyMySQL==1.1.1
PyYAML==6.0.2
pyodbc==5.2.0
pyorc==0.9.0
redshift-connector==2.1.3
scipy==1.14.1
scikit-learn==1.5.2
SQLAlchemy==2.0.36
```

**Important**  
Utilisez cette option avec prudence, en particulier pour les charges de travail de production. Extraire les dépendances de PyPI au moment de l'exécution est très risqué car vous ne pouvez pas être sûr de l'artefact auquel correspond pip. L'utilisation de versions de bibliothèques non épinglées est particulièrement risquée car elle extrait la dernière version des modules python, ce qui peut introduire des modifications importantes ou introduire un module python incompatible. Cela pourrait entraîner un échec de la tâche en raison de l'échec de l'installation de Python dans l'environnement de travail AWS Glue. Bien que l'épinglage de la version de la bibliothèque augmente la stabilité, la résolution des pip n'est toujours pas totalement déterministe, de sorte que des problèmes similaires peuvent survenir. À titre de bonne pratique, AWS Glue recommande d'utiliser des objets figés tels que des fermetures de roues ou des limes individuelles (voir [(Recommandé) Installation de bibliothèques Python supplémentaires dans AWS Glue 5.0 ou version ultérieure à l'aide de Zip of Wheels](#glue-python-library-installing-zip-of-wheels) pour plus de détails). 

**Important**  
Si vous n'identifiez pas les versions de vos dépendances transitives, une dépendance principale peut générer des versions de dépendances transitives incompatibles. La meilleure pratique consiste à épingler toutes les versions de bibliothèque pour améliorer la cohérence des tâches AWS Glue. Mieux encore, AWS Glue recommande de regrouper vos dépendances dans un fichier zip of wheels afin de garantir une cohérence et une fiabilité maximales pour vos charges de travail de production. 

### Installation de bibliothèques Python supplémentaires, configurées directement sous forme de liste séparée par des virgules
<a name="glue-python-library-installing-comma-separated-list"></a>

Pour mettre à jour ou ajouter un nouveau module Python, AWS Glue permet de transmettre des `--additional-python-modules` paramètres avec une liste de modules Python séparés par des virgules sous forme de valeurs. Par exemple, pour mettre à jour ou ajouter un module scikit-learn, utilisez la clé/valeur suivante : `"--additional-python-modules", "scikit-learn==0.21.3"`. Vous avez deux options pour configurer directement les modules Python.
+ **Module Python épinglé**

  `"--additional-python-modules", "scikit-learn==0.21.3,ephem==4.1.6"`
+ **Module Python non épinglé : (non recommandé pour les charges de travail de production)**

  `"--additional-python-modules", "scikit-learn>==0.20.0,ephem>=4.0.0"`

  OU

  `"--additional-python-modules", "scikit-learn,ephem"`

**Important**  
Utilisez cette option avec prudence, en particulier pour les charges de travail de production. Extraire les dépendances de PyPI au moment de l'exécution est très risqué car vous ne pouvez pas être sûr de l'artefact auquel correspond pip. L'utilisation de versions de bibliothèques non épinglées est particulièrement risquée car elle extrait la dernière version des modules python, ce qui peut introduire des modifications importantes ou introduire un module python incompatible. Cela pourrait entraîner un échec de la tâche en raison de l'échec de l'installation de Python dans l'environnement de travail AWS Glue. Bien que l'épinglage de la version de la bibliothèque augmente la stabilité, la résolution des pip n'est toujours pas totalement déterministe, de sorte que des problèmes similaires peuvent survenir. À titre de bonne pratique, AWS Glue recommande d'utiliser des objets figés tels que des fermetures de roues ou des limes individuelles (voir [(Recommandé) Installation de bibliothèques Python supplémentaires dans AWS Glue 5.0 ou version ultérieure à l'aide de Zip of Wheels](#glue-python-library-installing-zip-of-wheels) pour plus de détails).

**Important**  
Si vous n'identifiez pas les versions de vos dépendances transitives, une dépendance principale peut générer des versions de dépendances transitives incompatibles. La meilleure pratique consiste à épingler toutes les versions de bibliothèque pour améliorer la cohérence des tâches AWS Glue. Mieux encore, AWS Glue recommande de regrouper vos dépendances dans un fichier zip of wheels afin de garantir une cohérence et une fiabilité maximales pour vos charges de travail de production. 

## Y compris des fichiers Python dotés de fonctionnalités PySpark natives
<a name="extra-py-files-support"></a>

AWS Glue est utilisé PySpark pour inclure des fichiers Python dans les tâches AWS Glue ETL. Vous aurez envie d'utiliser `--additional-python-modules` pour gérer vos dépendances lorsqu'elles sont disponibles. Vous pouvez utiliser le paramètre de tâche `--extra-py-files` pour inclure des fichiers Python. Les dépendances doivent être hébergées dans Amazon S3, et la valeur de l'argument doit être une liste de chemins non-espacés Amazon S3 délimités par des virgules. Cette fonctionnalité se comporte comme la gestion des dépendances Python que vous utiliseriez avec Spark. Pour plus d'informations sur la gestion des dépendances Python dans Spark, consultez la page [Utilisation des fonctionnalités PySpark natives](https://spark.apache.org/docs/latest/api/python/tutorial/python_packaging.html#using-pyspark-native-features) dans la documentation d'Apache Spark. `--extra-py-files`est utile dans les cas où votre code supplémentaire n'est pas empaqueté ou lorsque vous migrez un programme Spark avec une chaîne d'outils existante pour gérer les dépendances. Pour que vos outils de dépendance soient gérables, vous devez regrouper vos dépendances avant de les soumettre. 

## Scripts de programmation utilisant des transformations visuelles
<a name="aws-glue-programming-with-cvt"></a>

 Lorsque vous créez une tâche AWS Glue à l'aide de l'interface visuelle de AWS Glue Studio, vous pouvez transformer vos données à l'aide de nœuds de transformation de données gérés et de transformations visuelles personnalisées. Pour plus d’informations sur les nœuds de transformation de données gérés, consultez [Transformation de données avec des transformations gérées par AWS Glue](edit-jobs-transforms.md). Pour plus d’informations sur les transformations visuelles personnalisées, consultez [Transformation des données avec des transformations visuelles personnalisées](custom-visual-transform.md). Les scripts utilisant des transformations visuelles ne peuvent être générés que lorsque le **langage** de votre tâche est configuré pour utiliser Python.

 Lors de la génération d'une tâche AWS Glue à l'aide de transformations visuelles, AWS Glue Studio inclut ces transformations dans l'environnement d'exécution en utilisant le `--extra-py-files` paramètre de configuration de la tâche. Pour de plus amples informations sur la définition des paramètres de la tâche, consultez [Utilisation des paramètres des tâches dans les tâches AWS Glue](aws-glue-programming-etl-glue-arguments.md). Lorsque vous apportez des modifications à un script généré ou à un environnement d’exécution, vous devez conserver cette configuration de tâche pour que votre script s’exécute correctement.

## Compression de bibliothèques pour intégration
<a name="aws-glue-programming-python-libraries-zipping"></a>

Sauf si elle est comprise dans un seul fichier `.py`, une bibliothèque doit être packagée dans une archive `.zip`. Le répertoire du package doit être à la racine de l'archive et contenir un fichier `__init__.py` pour le package. Python sera alors en mesure d'importer le package normalement.

Si votre bibliothèque se compose d'un seul module Python dans un fichier `.py`, vous n'avez pas besoin de la mettre dans un fichier `.zip`.

## Chargement de bibliothèques Python dans les blocs-notes AWS Glue Studio
<a name="aws-glue-programming-python-libraries-notebooks"></a>

 Pour spécifier les bibliothèques Python dans les blocs-notes AWS Glue Studio, consultez la section [Installation de modules Python supplémentaires](https://docs.aws.amazon.com/glue/latest/dg/manage-notebook-sessions.html#specify-default-modules). 

## Chargement de bibliothèques Python dans un endpoint de développement dans AWS Glue 0.9/1.0
<a name="aws-glue-programming-python-libraries-dev-endpoint"></a>

Si vous utilisez différents ensembles de bibliothèques pour différents scripts ETL, vous pouvez configurer un point de terminaison de développement distinct pour chaque ensemble, ou écraser le(s) fichier(s) `.zip` de bibliothèque que votre point de terminaison de développement charge à chaque fois que vous basculez d'un script à un autre.

Vous pouvez utiliser la console pour spécifier un ou plusieurs fichiers .zip de bibliothèque pour un point de terminaison de développement lorsque vous créez celui-ci. Après avoir attribué un nom et un rôle IAM, sélectionnez **Script Libraries and job parameters (optional)** (Bibliothèques de scripts et paramètres de tâches [facultatif]) et saisissez le chemin d'accès Amazon S3 complet à votre fichier `.zip` de bibliothèque dans la zone **Python library path** (Chemin de bibliothèque Python). Par exemple :

```
s3://bucket/prefix/site-packages.zip
```

Si vous le souhaitez, vous pouvez spécifier plusieurs chemins complets pour les fichiers, en les séparant par des virgules, mais sans espace, comme l'exemple suivant :

```
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
```

Si vous mettez à jour ces fichiers `.zip` ultérieurement, vous pouvez utiliser la console pour les importer de nouveau dans votre point de terminaison de développement. Naviguez vers le point de terminaison de développement concerné, cochez la case située en regard, puis choisissez **Update ETL libraries** (Mettre à jour des bibliothèques ETL) dans le menu **Action**.

De la même manière, vous pouvez spécifier des fichiers de bibliothèque à l'aide de la AWS Glue APIs. Lorsque vous créez un point de terminaison de développement en appelant [CreateDevEndpoint action (Python : create\$1dev\$1endpoint)](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-CreateDevEndpoint), vous pouvez spécifier un ou plusieurs chemins complets de bibliothèques dans le paramètre `ExtraPythonLibsS3Path`, dans un appel ressemblant à ceci :

```
dep = glue.create_dev_endpoint(
             EndpointName="testDevEndpoint",
             RoleArn="arn:aws:iam::123456789012",
             SecurityGroupIds="sg-7f5ad1ff",
             SubnetId="subnet-c12fdba4",
             PublicKey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtp04H/y...",
             NumberOfNodes=3,
             ExtraPythonLibsS3Path="s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip")
```

Lorsque vous mettez à jour un point de terminaison de développement, vous pouvez également mettre à jour les bibliothèques chargées par ce point de terminaison en utilisant un objet [DevEndpointCustomLibraries](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-DevEndpointCustomLibraries) et en définissant le paramètre `UpdateEtlLibraries ` sur `True` lors de l'appel de [UpdateDevEndpoint (update\$1dev\$1endpoint)](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-UpdateDevEndpoint).

## Utilisation de bibliothèques Python dans une tâche ou JobRun
<a name="aws-glue-programming-python-libraries-job"></a>

Lorsque vous créez un objet Job sur la console, vous pouvez spécifier un ou plusieurs fichiers .zip de bibliothèque en sélectionnant **Script Libraries and job parameters (optional)** (Bibliothèques de scripts et paramètres de tâches [facultatif]) et en entrant le ou les chemins d'accès Amazon S3 complets aux bibliothèques, comme vous le feriez lors de la création d'un point de terminaison de développement :

```
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
```

Si vous appelez [CreateJob (créer\$1job)](aws-glue-api-jobs-job.md#aws-glue-api-jobs-job-CreateJob), vous pouvez spécifier un ou plusieurs chemins d'accès complets aux bibliothèques par défaut en utilisant les paramètres par défaut `--extra-py-files`, comme suit :

```
job = glue.create_job(Name='sampleJob',
                      Role='Glue_DefaultRole',
                      Command={'Name': 'glueetl',
                               'ScriptLocation': 's3://my_script_bucket/scripts/my_etl_script.py'},
                      DefaultArguments={'--extra-py-files': 's3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip'})
```

Ensuite, lorsque vous démarrez une JobRun, vous pouvez remplacer le paramètre de bibliothèque par défaut par un autre :

```
runId = glue.start_job_run(JobName='sampleJob',
                           Arguments={'--extra-py-files': 's3://bucket/prefix/lib_B.zip'})
```

## Analyse proactive des dépendances Python
<a name="aws-glue-programming-analyzing-python-dependencies"></a>

 Pour identifier de manière proactive les problèmes de dépendance potentiels avant le déploiement sur AWS Glue, vous pouvez utiliser l'outil d'analyse des dépendances pour valider vos packages Python par rapport à votre environnement AWS Glue cible. 

 AWS fournit un outil d'analyse de dépendance Python open source spécialement conçu pour les environnements AWS Glue. Cet outil est disponible dans le référentiel d'échantillons AWS Glue et peut être utilisé localement pour valider vos dépendances avant le déploiement. 

 Cette analyse permet de garantir que vos dépendances respectent la pratique recommandée qui consiste à épingler toutes les versions de bibliothèque pour des déploiements de production cohérents. Pour plus de détails, veuillez consulter le [fichier README](https://github.com/aws-samples/aws-glue-samples/tree/master/utilities/glue_python_dependency_analyzer) de l’outil. 

### Utilisation de l'analyseur AWS de dépendance Glue
<a name="w2aac67c11c14c18c37c11b1"></a>

 L'analyseur de dépendance AWS Glue Python permet d'identifier les dépendances non épinglées et les conflits de versions en simulant l'installation de pip avec des contraintes spécifiques à la plate-forme qui correspondent à votre environnement Glue cible. AWS 

```
# Analyze a single Glue job
python glue_dependency_analyzer.py -j my-glue-job

# Analyze multiple jobs with specific AWS configuration
python glue_dependency_analyzer.py -j job1 -j job2 --aws-profile production --aws-region us-west-2
```

 L’outil signalera les éléments suivants : 
+  Dépendances non épinglées susceptibles d’installer différentes versions au cours de l’exécution des tâches 
+  Conflits de version entre les packages 
+  Dépendances non disponibles pour votre environnement AWS Glue cible 

## Analyse et correction des échecs de tâches dus aux dépendances Python avec Amazon Q Developer
<a name="aws-glue-programming-analyze-job-failures-with-amazon-q"></a>

 Amazon Q Developer est un assistant conversationnel basé sur l'intelligence artificielle générative (IA) qui peut vous aider à comprendre, créer, étendre et exploiter AWS des applications. Vous pouvez le télécharger en suivant les instructions du Guide de démarrage d’Amazon Q. 

 Amazon Q Developer peut être utilisé pour analyser et corriger les échecs de tâches dus à la dépendance Python. Nous vous suggérons d’utiliser l’invite suivante en remplaçant l’espace réservé <Job-Name> de la tâche par le nom de votre tâche Glue. 

```
I have an AWS Glue job named <Job-Name> that has failed due to Python module installation conflicts. Please assist in diagnosing and resolving this issue using the following systematic approach. Proceed once sufficient information is available.

Objective: Implement a fix that addresses the root cause module while minimizing disruption to the existing working environment.

Step 1: Root Cause Analysis
• Retrieve the most recent failed job run ID for the specified Glue job
• Extract error logs from CloudWatch Logs using the job run ID as a log stream prefix
• Analyze the logs to identify:
  • The recently added or modified Python module that triggered the dependency conflict
  • The specific dependency chain causing the installation failure
  • Version compatibility conflicts between required and existing modules

Step 2: Baseline Configuration Identification
• Locate the last successful job run ID prior to the dependency failure
• Document the Python module versions that were functioning correctly in that baseline run
• Establish the compatible version constraints for conflicting dependencies

Step 3: Targeted Resolution Implementation
• Apply pinning by updating the job's additional_python_modules parameter
• Pin only the root cause module and its directly conflicting dependencies to compatible versions, and do not remove python modules unless necessary
• Preserve flexibility for non-conflicting modules by avoiding unnecessary version constraints
• Deploy the configuration changes with minimal changes to the existing configuration and execute a validation test run. Do not change the Glue versions.

Implementation Example:
Scenario: Recently added pandas==2.0.0 to additional_python_modules
Error: numpy version conflict (pandas 2.0.0 requires numpy>=1.21, but existing job code requires numpy<1.20)
Resolution: Update additional_python_modules to "pandas==1.5.3,numpy==1.19.5"
Rationale: Use pandas 1.5.3 (compatible with numpy 1.19.5) and pin numpy to last known working version

Expected Outcome: Restore job functionality with minimal configuration changes while maintaining system stability.
```

 L’invite demande à Q d’effectuer les opérations suivantes : 

1. Récupérer l’ID d’exécution de la dernière tâche ayant échoué

1. Rechercher les journaux et les détails associés

1. Rechercher des exécutions de tâches réussies pour détecter tout package Python modifié

1. Apporter des corrections aux configurations et déclencher une autre exécution test

## Modules Python déjà fournis dans AWS Glue
<a name="glue-modules-provided"></a>

Pour modifier la version de ces modules fournis, fournissez de nouvelles versions avec le paramètre de tâche `--additional-python-modules`.

------
#### [ AWS Glue version 5.1 ]

AWS La version 5.1 de Glue inclut les modules Python suivants prêts à l'emploi :
+ aiobotocore==2,25,1
+ aiohappyeballs==2.6.1
+ aiohttp==3.13.2
+ aioitertools==0.12.0
+ aiosignal ==1.4.0
+ appdirs==1.4.4
+ attrs = 25,4,0
+ boto3==1.40.61
+ botocore==1,40,61
+ certifi==2025.10.5
+ normaliseur de jeux de caractères ==3.4.4
+ chorégraphe ==1.2.0
+ contourpy==1.3.3
+ cycleur ==0,12.1
+ distlib ==0,4.0
+ filelock==3.20.0
+ fonttools==4.60.1
+ liste congelée ==1.8.0
+ fsspec==2025.10.0
+ idna=3.11
+ iniconfig==2.3.0
+ mespath=1.0.1
+ kaleido==1.2.0
+ kiwisolver ==1.4.9
+ logistro==2.0.1
+ matplotlib==3.10.7
+ multidict==6.7.0
+ narvals ==2.10.2
+ numpy==2.3.4
+ orjson==3.11.4
+ emballage = 25,0
+ pandas==2.3.3
+ oreiller==12.0.0
+ pip=24,0
+ platformdirs==4.5.0
+ plutly=6.4.0
+ pluggy==1.6.0
+ propcache==0.4.1
+ pyarrow=22.0.0
+ Pygments==2.19.2
+ pyparsing==3.2.5
+ pytest-timeout=2.4.0
+ pytest=8.4.2
+ python-dateutil==2.9.0.post0
+ pytz=2025,2
+ demandes ==2.32.5
+ s3fs==2025,1,0
+ transfert s3 = 0,14.0
+ seaborn==0.13.2
+ outils de configuration ==79.0.1
+ simplejson==3.20.2
+ six = 1,17,0
+ ténacité ==9.1.2
+ typing\$1extensions==4.15.0
+ tzdata=2025,2
+ urllib3==2.5.0
+ uv = 0,9,7
+ virtualenv = 20,35,4
+ wrapt==1.17.3
+ fil = 1,2.0

------
#### [ AWS Glue version 5.0 ]

AWS La version 5.0 de Glue inclut les modules Python suivants prêts à l'emploi :
+ aiobotocore==2,13.1
+ aiohappyeyeballs==2.3.5
+ aiohttp==3.10.1
+ aioitertools==0.11.0
+ aiosignal==1.3.1
+ appdirs==1.4.4
+ attrs = 24,2,0
+ boto3==1.34.131
+ botocore==1,34,131
+ certifi==2024.7.4
+ normaliseur de jeux de caractères ==3.3.2
+ contourpy==1.2.1
+ cycleur ==0,12.1
+ fonttools==4.53.1
+ liste congelée ==1.4.1
+ fsspec==2024.6.1
+ idna==2.10
+ jmespath==0.10.0
+ kaleido==0.2.1
+ kiwisolver ==1.4.5
+ matplotlib==3.9.0
+ multidict==6,0.5
+ numpy==1,26,4
+ emballage==24,1
+ pandas==2.2.2
+ oreiller ==10.4.0
+ pip==23.0.1
+ plotly==5.23.0
+ pyarrow=17,0,0
+ pyparsing==3.1.2
+ python-dateutil==2.9.0.post0
+ pytz=2024,1
+ demandes ==2.32.2
+ s3fs==2024,6,1
+ transfert s3 ==0.10.2
+ seaborn==0.13.2
+ outils de configuration ==59.6.0
+ six==1.16.0
+ tenacity==9.0.0
+ tzdata==2024.1
+ urllib3==1.25.10
+ virtualenv==20.4.0
+ wrapt==1,16,0
+ yarl==1,9.4

------
#### [ AWS Glue version 4.0 ]

AWS La version 4.0 de Glue inclut les modules Python suivants prêts à l'emploi :
+ aiobotocore==2.4.1
+ aiohttp==3.8.3
+ aioitertools==0.11.0
+ aiosignal==1.3.1
+ async-timeout==4.0.2
+ asynctest==0.13.0
+ attrs==22.2.0
+ avro-python3==1.10.2
+ boto3==1.24.70
+ botocore==1.27.59
+ certifi==2021.5.30
+ chardet==3.0.4
+ charset-normalizer==2.1.1
+ click==8.1.3
+ cycler==0.10.0
+ Cython==0.29.32
+ fsspec==2021.8.1
+ idna==2.10
+ importlib-metadata==5.0.0
+ jmespath==0.10.0
+ joblib==1.0.1
+ kaleido==0.2.1
+ kiwisolver==1.4.4
+ matplotlib==3.4.3
+ mpmath==1.2.1
+ multidict==6.0.4
+ nltk==3.7
+ numpy==1.23.5
+ packaging==23.0
+ pandas==1.5.1
+ patsy==0.5.1
+ Pillow==9.4.0
+ pip==23.0.1
+ plotly==5.16.0
+ pmdarima==2.0.1
+ ptvsd==4.3.2
+ pyarrow==10.0.0
+ pydevd==2.5.0
+ pyhocon==0.3.58
+ PyMySQL==1.0.2
+ pyparsing==2.4.7
+ python-dateutil==2.8.2
+ pytz==2021.1
+ PyYAML==6.0.1
+ regex==2022.10.31
+ requests==2.23.0
+ s3fs==2022.11.0
+ s3transfer==0.6.0
+ scikit-learn==1.1.3
+ scipy==1.9.3
+ setuptools==49.1.3
+ six==1.16.0
+ statsmodels==0.13.5
+ subprocess32==3.5.4
+ sympy==1.8
+ tbats==1.1.0
+ threadpoolctl==3.1.0
+ tqdm==4.64.1
+ typing\$1extensions==4.4.0
+ urllib3==1.25.11
+ wheel==0.37.0
+ wrapt==1.14.1
+ yarl==1.8.2
+ zipp==3.10.0

------
#### [ AWS Glue version 3.0 ]

AWS La version 3.0 de Glue inclut les modules Python suivants prêts à l'emploi :,
+ aiobotocore==1.4.2
+ aiohttp==3.8.3
+ aioitertools==0.11.0
+ aiosignal==1.3.1
+ async-timeout==4.0.2
+ asynctest==0.13.0
+ attrs==22.2.0
+ avro-python3==1.10.2
+ boto3==1.18.50
+ botocore==1.21.50
+ certifi==2021.5.30
+ chardet==3.0.4
+ charset-normalizer==2.1.1
+ click==8.1.3
+ cycler==0.10.0
+ Cython==0.29.4
+ docutils==0.17.1
+ enum34==1.1.10
+ frozenlist==1.3.3
+ fsspec==2021.8.1
+ idna==2.10
+ importlib-metadata==6.0.0
+ jmespath==0.10.0
+ joblib==1.0.1
+ kiwisolver==1.3.2
+ matplotlib==3.4.3
+ mpmath==1.2.1
+ multidict==6.0.4
+ nltk==3.6.3
+ numpy==1.19.5
+ packaging==23.0
+ pandas==1.3.2
+ patsy==0.5.1
+ Pillow==9.4.0
+ pip==23.0
+ pmdarima==1.8.2
+ ptvsd==4.3.2
+ pyarrow==5.0.0
+ pydevd==2.5.0
+ pyhocon==0.3.58
+ PyMySQL==1.0.2
+ pyparsing==2.4.7
+ python-dateutil==2.8.2
+ pytz==2021.1
+ PyYAML==5.4.1
+ regex==2022.10.31
+ requests==2.23.0
+ s3fs==2021.8.1
+ s3transfer==0.5.0
+ scikit-learn==0.24.2
+ scipy==1.7.1
+ six==1.16.0
+ Spark==1.0
+ statsmodels==0.12.2
+ subprocess32==3.5.4
+ sympy==1.8
+ tbats==1.1.0
+ threadpoolctl==3.1.0
+ tqdm==4.64.1
+ typing\$1extensions==4.4.0
+ urllib3==1.25.11
+ wheel==0.37.0
+ wrapt==1.14.1
+ yarl==1.8.2
+ zipp==3.12.0

------
#### [ AWS Glue version 2.0 ]

AWS La version 2.0 de Glue inclut les modules Python suivants prêts à l'emploi :
+ avro-python3==1.10.0
+ awscli==1.27.60
+ boto3==1.12.4
+ botocore==1.15.4
+ certifi==2019.11.28
+ chardet==3.0.4
+ click==8.1.3
+ colorama==0.4.4
+ cycler==0.10.0
+ Cython==0.29.15
+ docutils==0.15.2
+ enum34==1.1.9
+ fsspec==0.6.2
+ idna==2.9
+ importlib-metadata==6.0.0
+ jmespath==0.9.4
+ joblib==0.14.1
+ kiwisolver==1.1.0
+ matplotlib==3.1.3
+ mpmath==1.1.0
+ nltk==3.5
+ numpy==1.18.1
+ pandas==1.0.1
+ patsy==0.5.1
+ pmdarima==1.5.3
+ ptvsd==4.3.2
+ pyarrow==0.16.0
+ pyasn1==0.4.8
+ pydevd==1.9.0
+ pyhocon==0.3.54
+ PyMySQL==0,9.3
+ pyparsing==2.4.6
+ python-dateutil==2.8.1
+ pytz==2019.3
+ PyYAML==5.3.1
+ regex==2022.10.31
+ requests==2.23.0
+ rsa==4.7.2
+ s3fs==0.4.0
+ s3transfer==0.3.3
+ scikit-learn==0.22.1
+ scipy==1.4.1
+ setuptools==45.2.0
+ six==1.14.0
+ Spark==1.0
+ statsmodels==0.11.1
+ subprocess32==3.5.4
+ sympy==1.5.1
+ tbats==1.0.9
+ tqdm==4.64.1
+ typing-extensions==4.4.0
+ urllib3==1.25.8
+ wheel==0.35.1
+ zipp==3.12.0

------

## Annexe A : Création d'un artefact Zip of Wheels
<a name="glue-python-library-zip-of-wheels-appendix"></a>

Nous montrons par exemple comment créer un artefact « zip of wheels ». L'exemple illustré télécharge les packages `cryptography` `scipy` dans un artefact ZIP of wheels et copie le zip of wheels vers un emplacement Amazon S3.

1. Vous devez exécuter les commandes pour créer le zip of wheels dans un environnement Amazon Linux similaire à celui de Glue. Consultez [Annexe B : Détails de l'environnement AWS Glue](#glue-python-libraries-environment-details). Glue 5.1 est utilisé AL2023 avec Python en version 3.11. Créez un Dockerfile qui créera cet environnement :

   ```
   FROM --platform=linux/amd64 public.ecr.aws/amazonlinux/amazonlinux:2023-minimal
   
   # Install Python 3.11, pip, and zip utility
   RUN dnf install -y python3.11 pip zip && \
       dnf clean all
   
   WORKDIR /build
   ```

1. Création d'un fichier requirements.txt

   ```
   cryptography
   scipy
   ```

1. Créez et lancez un conteneur docker

   ```
   # Build docker image
   docker build --platform linux/amd64 -t glue-wheel-builder .
   
   # Spin up container
   docker run --platform linux/amd64 -v $(pwd)/requirements.txt:/input/requirements.txt:ro -v $(pwd):/output -it glue-wheel-builder bash
   ```

1. Exécutez les commandes suivantes dans l'image du docker

   ```
   # Create a directory for the wheels
   mkdir wheels
   
   # Copy requirements.txt into wheels directory
   cp /input/requirements.txt wheels/
   
   # Download the wheels with the correct platform and Python version
   pip3 download \
       -r wheels/requirements.txt \
       --dest wheels/ \
       --platform manylinux2014_x86_64 \
       --python-version 311 \
       --only-binary=:all:
   
   # Package the wheels into a zip archive with the .gluewheels.zip suffix
   zip -r mylibraries-1.0.0.gluewheels.zip wheels/
   
   # Copy zip to output
   cp mylibraries-1.0.0.gluewheels.zip /output/
   
   # Exit the container
   exit
   ```

1. Téléchargez Zip of Wheels sur l'emplacement Amazon S3

   ```
   aws s3 cp mylibraries-1.0.0.gluewheels.zip s3://amzn-s3-demo-bucket/example-prefix/
   ```

1. Nettoyage optionnel

   ```
   rm mylibraries-1.0.0.gluewheels.zip
   rm Dockerfile
   rm requirements.txt
   ```

1. Exécutez la tâche Glue avec les arguments de tâche suivants :

   ```
   --additional-python-modules s3://amzn-s3-demo-bucket/example-prefix/mylibraries-1.0.0.gluewheels.zip
   --python-modules-installer-option --no-index
   ```

## Annexe B : Détails de l'environnement AWS Glue
<a name="glue-python-libraries-environment-details"></a>


**Compatibilité des versions de Glue et méthodes d’installation**  

| AWS Version Glue | Version de Python | Image de base | version glibc | Tags de plateforme compatibles | 
| --- | --- | --- | --- | --- | 
| 5.1 | 3,11 | [Amazon Linux 2023 (AL2023)](https://aws.amazon.com/linux/amazon-linux-2023/) | 2,34 |  manylinux\$12\$134\$1x86\$164 manylinux\$12\$128\$1x86\$164 manylinux2014\$1x86\$164  | 
| 5.0 | 3,11 | [Amazon Linux 2023 (AL2023)](https://aws.amazon.com/linux/amazon-linux-2023/) | 2,34 |  manylinux\$12\$134\$1x86\$164 manylinux\$12\$128\$1x86\$164 manylinux2014\$1x86\$164  | 
| 4.0 | 3,10 | [Amazon Linux (2AL2)](https://aws.amazon.com/amazon-linux-2/) | 2,26 | manylinux2014\$1x86\$164 | 
| 3.0 | 3.7 | [Amazon Linux (2AL2)](https://aws.amazon.com/amazon-linux-2/) | 2,26 | manylinux2014\$1x86\$164 | 
| 2.0 | 3.7 | [AMI Amazon Linux (AL1)](https://aws.amazon.com/amazon-linux-ami/) | 2,17 | manylinux2014\$1x86\$164 | 

 Dans le cadre du [modèle de responsabilitéAWS partagée](https://aws.amazon.com/compliance/shared-responsibility-model/), vous êtes responsable de la gestion des modules Python supplémentaires, des bibliothèques et de leurs dépendances que vous utilisez avec vos tâches AWS Glue ETL. Cela inclut l’application de mises à jour et de correctifs de sécurité. 

 AWS Glue ne prend pas en charge la compilation de code natif dans l'environnement de travail. Cependant, les tâches AWS Glue s'exécutent dans un environnement Linux géré par Amazon. Vous pouvez peut-être fournir vos dépendances natives sous une forme compilée via un fichier Wheel Python. Reportez-vous au tableau ci-dessus pour plus d'informations sur la compatibilité des versions de AWS Glue. 

**Important**  
 L’utilisation de dépendances incompatibles peut entraîner des problèmes d’exécution, en particulier pour les bibliothèques dont les extensions natives doivent correspondre à l’architecture et aux bibliothèques système de l’environnement cible. Chaque version de AWS Glue fonctionne sur une version spécifique de Python avec des bibliothèques et des configurations système préinstallées. 

# Exemples de code Python AWS Glue
<a name="aws-glue-programming-python-samples"></a>
+ [Exemple de code : Données de jonction et de mise en relation](aws-glue-programming-python-samples-legislators.md)
+ [Exemple de code : préparation des données à l'aide ResolveChoice de Lambda et ApplyMapping](aws-glue-programming-python-samples-medicaid.md)

# Exemple de code : Données de jonction et de mise en relation
<a name="aws-glue-programming-python-samples-legislators"></a>

Cet exemple utilise un ensemble de données qui a été téléchargé sur [http://everypolitician.org/](http://everypolitician.org/) dans le compartiment `sample-dataset` d'Amazon Simple Storage Service (Amazon S3) : `s3://awsglue-datasets/examples/us-legislators/all`. Cet ensemble de données contient des données au format JSON concernant les législateurs américains et les fonctions qu'ils ont occupées à la Chambre des représentants et au Sénat. Il a été légèrement modifié et il a été mis à la disposition des utilisateurs dans un compartiment Amazon S3 public aux fins de ce didacticiel.

Le code source de cet exemple se trouve dans le `join_and_relationalize.py` fichier du [référentiel AWS Glue d'échantillons](https://github.com/awslabs/aws-glue-samples) du site GitHub Web.

Grâce à ces données, ce didacticiel vous montre comment effectuer les opérations suivantes :
+ Utilisez un AWS Glue robot pour classer les objets stockés dans un compartiment Amazon S3 public et enregistrez leurs schémas dans le catalogue de données AWS Glue.
+ Examiner les métadonnées et les schémas de la table résultant de l'analyse ;
+ Écrire un script Extract-transform-load (ETL) en Python qui utilise les métadonnées dans Data Catalog pour effectuer les actions suivantes :
  + Joindre les données dans différents fichiers sources en une seule table de données (c'est-à-dire, dénormaliser les données).
  + Filtrer la table jointe en tables distinctes par type de législateur.
  + Écrire les données résultantes en vue de séparer les fichiers Apache Parquet à des fins d'analyse ultérieure.

La méthode préférée pour déboguer Python ou PySpark des scripts pendant l'exécution AWS consiste à utiliser [Notebooks on AWS Glue Studio](https://docs.aws.amazon.com/glue/latest/ug/notebooks-chapter.html).

## Étape 1 : analyser les données dans le compartiment Amazon S3
<a name="aws-glue-programming-python-samples-legislators-crawling"></a>

1. Connectez-vous à et ouvrez AWS Management Console la AWS Glue console à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. En suivant les étapes décrites[Configuration d’un robot](define-crawler.md), créez un nouveau robot d'exploration capable d'explorer le `s3://awsglue-datasets/examples/us-legislators/all` jeu de données dans une base de données nommée `legislators` dans le catalogue de données AWS Glue. Les exemples de données sont déjà dans ce compartiment Amazon S3 public.

1. Exécutez le nouvel crawler, puis activez la base de données `legislators`. 

   L'crawler crée les tables de métadonnées suivantes :
   + `persons_json`
   + `memberships_json`
   + `organizations_json`
   + `events_json`
   + `areas_json`
   + `countries_r_json`

   Il s'agit d'un ensemble de tables semi-normalisé contenant les législateurs et leurs carrières.

## Étape 2 : Ajouter le script Boilerplate au bloc-notes de point de terminaison de développement
<a name="aws-glue-programming-python-samples-legislators-boilerplate"></a>

Collez le script Boilerplate suivant dans le bloc-notes du point de terminaison de développement pour importer les bibliothèques AWS Glue dont vous avez besoin, et configurez un `GlueContext` :

```
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

glueContext = GlueContext(SparkContext.getOrCreate())
```

## Étape 3 : examiner les schémas à partir des données de Data Catalog
<a name="aws-glue-programming-python-samples-legislators-schemas"></a>

Ensuite, vous pouvez facilement créer, examiner un DynamicFrame à partir du catalogue de données AWS Glue et examiner les schémas des données. Par exemple, pour afficher le schéma de la table `persons_json`, ajoutez les éléments suivants à votre bloc-notes :

```
persons = glueContext.create_dynamic_frame.from_catalog(
             database="legislators",
             table_name="persons_json")
print "Count: ", persons.count()
persons.printSchema()
```

Voici le résultat des appels d'impression :

```
Count:  1961
root
|-- family_name: string
|-- name: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- gender: string
|-- image: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- name: string
|    |    |-- lang: string
|-- sort_name: string
|-- images: array
|    |-- element: struct
|    |    |-- url: string
|-- given_name: string
|-- birth_date: string
|-- id: string
|-- contact_details: array
|    |-- element: struct
|    |    |-- type: string
|    |    |-- value: string
|-- death_date: string
```

Chaque personne contenue dans la table est un membre de certains des organismes du Congrès des Etats-Unis.

Pour afficher le schéma de la table `memberships_json`, tapez ce qui suit :

```
memberships = glueContext.create_dynamic_frame.from_catalog(
                 database="legislators",
                 table_name="memberships_json")
print "Count: ", memberships.count()
memberships.printSchema()
```

La sortie est la suivante :

```
Count:  10439
root
|-- area_id: string
|-- on_behalf_of_id: string
|-- organization_id: string
|-- role: string
|-- person_id: string
|-- legislative_period_id: string
|-- start_date: string
|-- end_date: string
```

Les `organizations` sont des partis et les deux chambres du Congrès, le Sénat et la Chambre des représentants. Pour afficher le schéma de la table `organizations_json`, tapez ce qui suit :

```
orgs = glueContext.create_dynamic_frame.from_catalog(
           database="legislators",
           table_name="organizations_json")
print "Count: ", orgs.count()
orgs.printSchema()
```

La sortie est la suivante :

```
Count:  13
root
|-- classification: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- image: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
|-- id: string
|-- name: string
|-- seats: int
|-- type: string
```

## Étape 4 : Filtrer les données
<a name="aws-glue-programming-python-samples-legislators-filtering"></a>

Ensuite, conservez uniquement les champs de votre choix, et renommez `id` en `org_id`. L'ensemble de données est suffisamment petit pour que vous puissiez l'afficher entièrement. 

`toDF()` convertit `DynamicFrame` en `DataFrame` Apache Spark, afin que vous puissiez appliquer les transformations qui existent déjà dans Apache Spark SQL :

```
orgs = orgs.drop_fields(['other_names',
                        'identifiers']).rename_field(
                            'id', 'org_id').rename_field(
                               'name', 'org_name')
orgs.toDF().show()
```

Le résultat est présenté ci-dessous :

```
+--------------+--------------------+--------------------+--------------------+-----+-----------+--------------------+
|classification|              org_id|            org_name|               links|seats|       type|               image|
+--------------+--------------------+--------------------+--------------------+-----+-----------+--------------------+
|         party|            party/al|                  AL|                null| null|       null|                null|
|         party|      party/democrat|            Democrat|[[website,http://...| null|       null|https://upload.wi...|
|         party|party/democrat-li...|    Democrat-Liberal|[[website,http://...| null|       null|                null|
|   legislature|d56acebe-8fdc-47b...|House of Represen...|                null|  435|lower house|                null|
|         party|   party/independent|         Independent|                null| null|       null|                null|
|         party|party/new_progres...|     New Progressive|[[website,http://...| null|       null|https://upload.wi...|
|         party|party/popular_dem...|    Popular Democrat|[[website,http://...| null|       null|                null|
|         party|    party/republican|          Republican|[[website,http://...| null|       null|https://upload.wi...|
|         party|party/republican-...|Republican-Conser...|[[website,http://...| null|       null|                null|
|         party|      party/democrat|            Democrat|[[website,http://...| null|       null|https://upload.wi...|
|         party|   party/independent|         Independent|                null| null|       null|                null|
|         party|    party/republican|          Republican|[[website,http://...| null|       null|https://upload.wi...|
|   legislature|8fa6c3d2-71dc-478...|              Senate|                null|  100|upper house|                null|
+--------------+--------------------+--------------------+--------------------+-----+-----------+--------------------+
```

Tapez la commande suivante pour afficher les `organizations` qui apparaissent dans `memberships` :

```
memberships.select_fields(['organization_id']).toDF().distinct().show()
```

Le résultat est présenté ci-dessous :

```
+--------------------+
|     organization_id|
+--------------------+
|d56acebe-8fdc-47b...|
|8fa6c3d2-71dc-478...|
+--------------------+
```

## Étape 5 : Synthèse
<a name="aws-glue-programming-python-samples-legislators-joining"></a>

À présent, utilisez AWS Glue pour joindre ces tables relationnelles et créer une table complète des carrières des `memberships` des législateurs et de leurs `organizations` correspondantes.

1. Commencez par joindre `persons` et `memberships` à `id` et `person_id`.

1. Ensuite, joignez le résultat avec `orgs` à `org_id` et `organization_id`.

1. Ensuite, déplacez les champs redondants, `person_id` et `org_id`.

Vous pouvez effectuer toutes ces opérations en une seule ligne de code (étendu) :

```
l_history = Join.apply(orgs,
                       Join.apply(persons, memberships, 'id', 'person_id'),
                       'org_id', 'organization_id').drop_fields(['person_id', 'org_id'])
print "Count: ", l_history.count()
l_history.printSchema()
```

La sortie est la suivante :

```
Count:  10439
root
|-- role: string
|-- seats: int
|-- org_name: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- type: string
|-- sort_name: string
|-- area_id: string
|-- images: array
|    |-- element: struct
|    |    |-- url: string
|-- on_behalf_of_id: string
|-- other_names: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- name: string
|    |    |-- lang: string
|-- contact_details: array
|    |-- element: struct
|    |    |-- type: string
|    |    |-- value: string
|-- name: string
|-- birth_date: string
|-- organization_id: string
|-- gender: string
|-- classification: string
|-- death_date: string
|-- legislative_period_id: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- image: string
|-- given_name: string
|-- family_name: string
|-- id: string
|-- start_date: string
|-- end_date: string
```

Vous disposez à présent de la table finale que vous pouvez utiliser pour l'analyse. Vous pouvez l'écrire dans un format compact et efficace pour les analyses, notamment Parquet, sur lesquelles vous pouvez exécuter SQL dans AWS Glue, Amazon Athena ou Amazon Redshift Spectrum.

L'appel suivant enregistre la table dans plusieurs fichiers afin de prendre en charge des lectures parallèles rapides lors de l'exécution d'une analyse ultérieure :

```
glueContext.write_dynamic_frame.from_options(frame = l_history,
          connection_type = "s3",
          connection_options = {"path": "s3://glue-sample-target/output-dir/legislator_history"},
          format = "parquet")
```

Pour réunir toutes les données d'historique en un seul fichier, vous devez les convertir dans un cadre de données, les repartitionner et les écrire :

```
s_history = l_history.toDF().repartition(1)
s_history.write.parquet('s3://glue-sample-target/output-dir/legislator_single')
```

Sinon, si vous souhaitez les distinguer en fonction du Sénat et de la Chambre des représentants :

```
l_history.toDF().write.parquet('s3://glue-sample-target/output-dir/legislator_part',
                               partitionBy=['org_name'])
```

## Étape 6 : Transformer les données pour les bases de données relationnelles
<a name="aws-glue-programming-python-samples-legislators-writing"></a>

AWS Glue permet d'écrire les données dans des bases de données relationnelles comme Amazon Redshift, même avec des données semi-structurées. Ainsi, vous obtenez une `relationalize` de transformation, qui aplatit `DynamicFrames`, quelle que soit la complexité des objets du cadre.

Dans cet exemple, à l'aide de `l_history` `DynamicFrame`, transmettez le nom d'une table racine (`hist_root`) et un chemin de travail temporaire `relationalize`. Cela renvoie une `DynamicFrameCollection`. Vous pouvez ensuite répertorier les noms des `DynamicFrames` de cet ensemble :

```
dfc = l_history.relationalize("hist_root", "s3://glue-sample-target/temp-dir/")
dfc.keys()
```

Voici la sortie de l'appel `keys` :

```
[u'hist_root', u'hist_root_contact_details', u'hist_root_links',
 u'hist_root_other_names', u'hist_root_images', u'hist_root_identifiers']
```

`Relationalize` a décomposé la table d'historique en six nouvelles tables : une table racine qui contient un enregistrement pour chaque objet dans le `DynamicFrame` et des tables auxiliaires pour les tableaux. La gestion de tableaux dans les bases de données relationnelles est souvent sous-optimale, en particulier lorsque ces tableaux deviennent volumineux. Décomposer les tableaux en différentes tables permet d'accélérer considérablement les requêtes.

Ensuite, consultez la décomposition en examinant `contact_details` :

```
l_history.select_fields('contact_details').printSchema()
dfc.select('hist_root_contact_details').toDF().where("id = 10 or id = 75").orderBy(['id','index']).show()
```

Voici la sortie de l'appel `show` :

```
root
|-- contact_details: array
|    |-- element: struct
|    |    |-- type: string
|    |    |-- value: string
+---+-----+------------------------+-------------------------+
| id|index|contact_details.val.type|contact_details.val.value|
+---+-----+------------------------+-------------------------+
| 10|    0|                     fax|                         |
| 10|    1|                        |             202-225-1314|
| 10|    2|                   phone|                         |
| 10|    3|                        |             202-225-3772|
| 10|    4|                 twitter|                         |
| 10|    5|                        |          MikeRossUpdates|
| 75|    0|                     fax|                         |
| 75|    1|                        |             202-225-7856|
| 75|    2|                   phone|                         |
| 75|    3|                        |             202-225-2711|
| 75|    4|                 twitter|                         |
| 75|    5|                        |                SenCapito|
+---+-----+------------------------+-------------------------+
```

Le champ `contact_details` était un tableau de structures dans le `DynamicFrame` d'origine. Chaque élément de ces tableaux est une ligne distincte dans la table auxiliaire, indexée par `index`. L'`id` ici est une clé étrangère dans la table `hist_root` avec la clé `contact_details` :

```
dfc.select('hist_root').toDF().where(
    "contact_details = 10 or contact_details = 75").select(
       ['id', 'given_name', 'family_name', 'contact_details']).show()
```

En voici la sortie :

```
+--------------------+----------+-----------+---------------+
|                  id|given_name|family_name|contact_details|
+--------------------+----------+-----------+---------------+
|f4fc30ee-7b42-432...|      Mike|       Ross|             10|
|e3c60f34-7d1b-4c0...|   Shelley|     Capito|             75|
+--------------------+----------+-----------+---------------+
```

Notez dans ces commandes que `toDF()`, puis une expression `where` sont utilisés pour filtrer les lignes à afficher.

Ainsi, la jonction de la table `hist_root` avec les tables auxiliaire vous permet d'effectuer les actions suivantes :
+ Charger des données dans les bases de données sans prise en charge par un tableau ;
+ Interroger chaque élément individuel dans un tableau à l'aide de SQL.

Stockez et accédez en toute sécurité à vos informations d'identification Amazon Redshift avec une connexion AWS Glue. Pour plus d'informations sur la création de votre propre connexion, consultez [Connexion aux données](glue-connections.md).

Vous êtes maintenant prêt à écrire vos données dans une connexion en parcourant le `DynamicFrames` un par un :

```
for df_name in dfc.keys():
  m_df = dfc.select(df_name)
  print "Writing to table: ", df_name
  glueContext.write_dynamic_frame.from_jdbc_conf(frame = m_df, connection settings here)
```

Les paramètres de connexion varient en fonction de votre type de base de données relationnelle : 
+ Pour obtenir des instructions sur l'écriture sur Amazon Redshift, consultez [Connexions Redshift](aws-glue-programming-etl-connect-redshift-home.md).
+ Pour d'autres bases de données, consultez [Types et options de connexion pour ETL dans AWS Glue pour Spark](aws-glue-programming-etl-connect.md).

## Conclusion
<a name="aws-glue-programming-python-samples-legislators-conclusion"></a>

En général, AWS Glue est très flexible. Il vous permet de réaliser, en quelques lignes de code, ce qui prendrait normalement plusieurs jours pour écrire. Vous pouvez trouver l'intégralité des scripts source-to-target ETL dans le fichier Python `join_and_relationalize.py` dans les [AWS Glueexemples](https://github.com/awslabs/aws-glue-samples) ci-dessous GitHub.

# Exemple de code : préparation des données à l'aide ResolveChoice de Lambda et ApplyMapping
<a name="aws-glue-programming-python-samples-medicaid"></a>

L'ensemble de données utilisé dans cet exemple comprend les données de paiement des prestataires de soins médicaux téléchargées à partir de deux ensembles de données [Data.cms.gov](https://data.cms.gov) : « Résumé des fournisseurs potentiels du système de paiement pour les patients hospitalisés pour les 100 principaux groupes liés au diagnostic - FY2011 » et « Données sur les frais d'hospitalisation pour l'exercice 2011 ». Après le téléchargement des données, nous avons modifié le jeu de données de manière à introduire quelques enregistrements erronés à la fin du fichier. Ce fichier modifié est situé dans un compartiment Amazon S3 public à l'adresse `s3://awsglue-datasets/examples/medicare/Medicare_Hospital_Provider.csv`.

Le code source de cet exemple se trouve dans le `data_cleaning_and_lambda.py` fichier du GitHub référentiel [AWS Glued'exemples](https://github.com/awslabs/aws-glue-samples).

La méthode préférée pour déboguer Python ou PySpark des scripts pendant l'exécution AWS consiste à utiliser [Notebooks on AWS Glue Studio](https://docs.aws.amazon.com/glue/latest/ug/notebooks-chapter.html).

## Étape 1 : analyser les données dans le compartiment Amazon S3
<a name="aws-glue-programming-python-samples-medicaid-crawling"></a>

1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. En suivant le processus décrit dans[Configuration d’un robot](define-crawler.md), créez un nouveau robot d'exploration capable d'explorer le `s3://awsglue-datasets/examples/medicare/Medicare_Hospital_Provider.csv` fichier et de placer les métadonnées obtenues dans une base de données nommée `payments` dans le catalogue de données AWS Glue.

1. Exécutez le nouvel crawler, puis activez la base de données `payments`. Vous devriez constater que l'crawler a créé un tableau de métadonnées nommé `medicare` dans la base de données après avoir lu le début du fichier pour déterminer son format et son délimiteur.

   Le schéma de la nouvelle table `medicare` se présente comme suit :

   ```
   Column  name                            Data type
   ==================================================
   drg definition                             string
   provider id                                bigint
   provider name                              string
   provider street address                    string
   provider city                              string
   provider state                             string
   provider zip code                          bigint
   hospital referral region description       string
   total discharges                           bigint
   average covered charges                    string
   average total payments                     string
   average medicare payments                  string
   ```

## Étape 2 : Ajouter le script Boilerplate au bloc-notes de point de terminaison de développement
<a name="aws-glue-programming-python-samples-medicaid-boilerplate"></a>

Collez le script Boilerplate suivant dans le bloc-notes du point de terminaison de développement pour importer les bibliothèques AWS Glue dont vous avez besoin, et configurez un `GlueContext` :

```
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

glueContext = GlueContext(SparkContext.getOrCreate())
```

## Étape 3 : Comparer les analyses des différents schémas
<a name="aws-glue-programming-python-samples-medicaid-schemas"></a>

Ensuite, vous pouvez voir si le schéma qui a été reconnu par un `DataFrame` Apache Spark est le même que celui que votre crawler AWS Glue a enregistré. Exécutez ce code :

```
medicare = spark.read.format(
   "com.databricks.spark.csv").option(
   "header", "true").option(
   "inferSchema", "true").load(
   's3://awsglue-datasets/examples/medicare/Medicare_Hospital_Provider.csv')
medicare.printSchema()
```

Voici la sortie de l'appel `printSchema` :

```
root
 |-- DRG Definition: string (nullable = true)
 |-- Provider Id: string (nullable = true)
 |-- Provider Name: string (nullable = true)
 |-- Provider Street Address: string (nullable = true)
 |-- Provider City: string (nullable = true)
 |-- Provider State: string (nullable = true)
 |-- Provider Zip Code: integer (nullable = true)
 |-- Hospital Referral Region Description: string (nullable = true)
 |--  Total Discharges : integer (nullable = true)
 |--  Average Covered Charges : string (nullable = true)
 |--  Average Total Payments : string (nullable = true)
 |-- Average Medicare Payments: string (nullable = true)
```

Ensuite, examinez le schéma généré par un `DynamicFrame` AWS Glue :

```
medicare_dynamicframe = glueContext.create_dynamic_frame.from_catalog(
       database = "payments",
       table_name = "medicare")
medicare_dynamicframe.printSchema()
```

La sortie de `printSchema` est la suivante :

```
root
 |-- drg definition: string
 |-- provider id: choice
 |    |-- long
 |    |-- string
 |-- provider name: string
 |-- provider street address: string
 |-- provider city: string
 |-- provider state: string
 |-- provider zip code: long
 |-- hospital referral region description: string
 |-- total discharges: long
 |-- average covered charges: string
 |-- average total payments: string
 |-- average medicare payments: string
```

Le `DynamicFrame` génère un schéma dans lequel `provider id` peut être un type `long` ou `string`. Le schéma `DataFrame` répertorie `Provider Id` comme étant un type `string` et le `provider id` répertorie Data Catalog comme étant un type `bigint`.

Lequel est correct ? Il existe deux enregistrements à la fin du fichier (sur un total de 160 000 enregistrements) avec des valeurs `string` dans cette colonne. Il s'agit des enregistrements erronés qui ont été introduits pour illustrer un problème.

Pour résoudre ce type de problème, `DynamicFrame` AWS Glue présente le concept de type *choice*. Dans ce cas, `DynamicFrame` montre que les valeurs `long` et `string` peuvent apparaître dans cette colonne. L'crawler AWS Glue a manqué les valeurs `string` car il seulement a pris en compte un préfixe de 2 Mo de données. Le `DataFrame` Apache Spark a pris en compte la totalité de l'ensemble de données, mais il a été contraint d'affecter le type le plus général à la colonne, à savoir `string`. En fait, Spark a souvent recours au cas le plus général pour des types ou des variations complexes avec lesquels il n'est pas familier.

Pour interroger la colonne `provider id`, commencez par résoudre le type de choix. Vous pouvez utiliser la méthode de transformation `resolveChoice` dans votre `DynamicFrame` pour convertir ces valeurs `string` en valeurs `long` avec une option `cast:long` :

```
medicare_res = medicare_dynamicframe.resolveChoice(specs = [('provider id','cast:long')])
medicare_res.printSchema()
```

La sortie `printSchema` est désormais :

```
root
 |-- drg definition: string
 |-- provider id: long
 |-- provider name: string
 |-- provider street address: string
 |-- provider city: string
 |-- provider state: string
 |-- provider zip code: long
 |-- hospital referral region description: string
 |-- total discharges: long
 |-- average covered charges: string
 |-- average total payments: string
 |-- average medicare payments: string
```

Lorsque la valeur `string` ne peut pas être convertie, AWS Glue insère une valeur `null`.

Une autre option consiste à convertir le type de choix en `struct`, qui conserve les valeurs des deux types.

Ensuite, regardez les lignes qui étaient anormales :

```
medicare_res.toDF().where("'provider id' is NULL").show()
```

Les informations suivantes s'affichent :

```
+--------------------+-----------+---------------+-----------------------+-------------+--------------+-----------------+------------------------------------+----------------+-----------------------+----------------------+-------------------------+
|      drg definition|provider id|  provider name|provider street address|provider city|provider state|provider zip code|hospital referral region description|total discharges|average covered charges|average total payments|average medicare payments|
+--------------------+-----------+---------------+-----------------------+-------------+--------------+-----------------+------------------------------------+----------------+-----------------------+----------------------+-------------------------+
|948 - SIGNS & SYM...|       null|            INC|       1050 DIVISION ST|      MAUSTON|            WI|            53948|                        WI - Madison|              12|              $11961.41|              $4619.00|                 $3775.33|
|948 - SIGNS & SYM...|       null| INC- ST JOSEPH|     5000 W CHAMBERS ST|    MILWAUKEE|            WI|            53210|                      WI - Milwaukee|              14|              $10514.28|              $5562.50|                 $4522.78|
+--------------------+-----------+---------------+-----------------------+-------------+--------------+-----------------+------------------------------------+----------------+-----------------------+----------------------+-------------------------+
```

Maintenant, supprimez les deux enregistrements incorrects, comme suit :

```
medicare_dataframe = medicare_res.toDF()
medicare_dataframe = medicare_dataframe.where("'provider id' is NOT NULL")
```

## Étape 4 : Mapper les données et utiliser les fonctions Lambda Apache Spark
<a name="aws-glue-programming-python-samples-medicaid-lambda-mapping"></a>

AWS Glue ne prend pas encore directement en charge les fonctions Lambda, également connues sous le nom de fonctions définies par l'utilisateur. Mais vous pouvez toujours convertir un `DynamicFrame` vers et depuis un `DataFrame` Apache Spark pour tirer avantage de la fonction Spark en plus des fonctions spécifiques de `DynamicFrames`.

Ensuite, convertissez les informations de paiement en chiffres, de sorte que les moteurs analytiques tels qu'Amazon Redshift ou Amazon Athena puissent analyser les chiffres plus rapidement :

```
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType

chop_f = udf(lambda x: x[1:], StringType())
medicare_dataframe = medicare_dataframe.withColumn(
        "ACC", chop_f(
            medicare_dataframe["average covered charges"])).withColumn(
                "ATP", chop_f(
                    medicare_dataframe["average total payments"])).withColumn(
                        "AMP", chop_f(
                            medicare_dataframe["average medicare payments"]))
medicare_dataframe.select(['ACC', 'ATP', 'AMP']).show()
```

La sortie de l'appel `show` est la suivante :

```
+--------+-------+-------+
|     ACC|    ATP|    AMP|
+--------+-------+-------+
|32963.07|5777.24|4763.73|
|15131.85|5787.57|4976.71|
|37560.37|5434.95|4453.79|
|13998.28|5417.56|4129.16|
|31633.27|5658.33|4851.44|
|16920.79|6653.80|5374.14|
|11977.13|5834.74|4761.41|
|35841.09|8031.12|5858.50|
|28523.39|6113.38|5228.40|
|75233.38|5541.05|4386.94|
|67327.92|5461.57|4493.57|
|39607.28|5356.28|4408.20|
|22862.23|5374.65|4186.02|
|31110.85|5366.23|4376.23|
|25411.33|5282.93|4383.73|
| 9234.51|5676.55|4509.11|
|15895.85|5930.11|3972.85|
|19721.16|6192.54|5179.38|
|10710.88|4968.00|3898.88|
|51343.75|5996.00|4962.45|
+--------+-------+-------+
only showing top 20 rows
```

Cela reste toujours des chaînes dans les données. Nous pouvons utiliser la puissante méthode de transformation `apply_mapping` pour supprimer, renommer, analyser et imbriquer les données afin que d'autres systèmes et langages de programmation puissent facilement y accéder :

```
from awsglue.dynamicframe import DynamicFrame
medicare_tmp_dyf = DynamicFrame.fromDF(medicare_dataframe, glueContext, "nested")
medicare_nest_dyf = medicare_tmp_dyf.apply_mapping([('drg definition', 'string', 'drg', 'string'),
                 ('provider id', 'long', 'provider.id', 'long'),
                 ('provider name', 'string', 'provider.name', 'string'),
                 ('provider city', 'string', 'provider.city', 'string'),
                 ('provider state', 'string', 'provider.state', 'string'),
                 ('provider zip code', 'long', 'provider.zip', 'long'),
                 ('hospital referral region description', 'string','rr', 'string'),
                 ('ACC', 'string', 'charges.covered', 'double'),
                 ('ATP', 'string', 'charges.total_pay', 'double'),
                 ('AMP', 'string', 'charges.medicare_pay', 'double')])
medicare_nest_dyf.printSchema()
```

La sortie `printSchema` est la suivante :

```
root
 |-- drg: string
 |-- provider: struct
 |    |-- id: long
 |    |-- name: string
 |    |-- city: string
 |    |-- state: string
 |    |-- zip: long
 |-- rr: string
 |-- charges: struct
 |    |-- covered: double
 |    |-- total_pay: double
 |    |-- medicare_pay: double
```

Vous pouvez reconvertir les données en `DataFrame` Spark, comme suit :

```
medicare_nest_dyf.toDF().show()
```

La sortie est la suivante :

```
+--------------------+--------------------+---------------+--------------------+
|                 drg|            provider|             rr|             charges|
+--------------------+--------------------+---------------+--------------------+
|039 - EXTRACRANIA...|[10001,SOUTHEAST ...|    AL - Dothan|[32963.07,5777.24...|
|039 - EXTRACRANIA...|[10005,MARSHALL M...|AL - Birmingham|[15131.85,5787.57...|
|039 - EXTRACRANIA...|[10006,ELIZA COFF...|AL - Birmingham|[37560.37,5434.95...|
|039 - EXTRACRANIA...|[10011,ST VINCENT...|AL - Birmingham|[13998.28,5417.56...|
|039 - EXTRACRANIA...|[10016,SHELBY BAP...|AL - Birmingham|[31633.27,5658.33...|
|039 - EXTRACRANIA...|[10023,BAPTIST ME...|AL - Montgomery|[16920.79,6653.8,...|
|039 - EXTRACRANIA...|[10029,EAST ALABA...|AL - Birmingham|[11977.13,5834.74...|
|039 - EXTRACRANIA...|[10033,UNIVERSITY...|AL - Birmingham|[35841.09,8031.12...|
|039 - EXTRACRANIA...|[10039,HUNTSVILLE...|AL - Huntsville|[28523.39,6113.38...|
|039 - EXTRACRANIA...|[10040,GADSDEN RE...|AL - Birmingham|[75233.38,5541.05...|
|039 - EXTRACRANIA...|[10046,RIVERVIEW ...|AL - Birmingham|[67327.92,5461.57...|
|039 - EXTRACRANIA...|[10055,FLOWERS HO...|    AL - Dothan|[39607.28,5356.28...|
|039 - EXTRACRANIA...|[10056,ST VINCENT...|AL - Birmingham|[22862.23,5374.65...|
|039 - EXTRACRANIA...|[10078,NORTHEAST ...|AL - Birmingham|[31110.85,5366.23...|
|039 - EXTRACRANIA...|[10083,SOUTH BALD...|    AL - Mobile|[25411.33,5282.93...|
|039 - EXTRACRANIA...|[10085,DECATUR GE...|AL - Huntsville|[9234.51,5676.55,...|
|039 - EXTRACRANIA...|[10090,PROVIDENCE...|    AL - Mobile|[15895.85,5930.11...|
|039 - EXTRACRANIA...|[10092,D C H REGI...|AL - Tuscaloosa|[19721.16,6192.54...|
|039 - EXTRACRANIA...|[10100,THOMAS HOS...|    AL - Mobile|[10710.88,4968.0,...|
|039 - EXTRACRANIA...|[10103,BAPTIST ME...|AL - Birmingham|[51343.75,5996.0,...|
+--------------------+--------------------+---------------+--------------------+
only showing top 20 rows
```

## Étape 5 : Écrire les données dans Apache Parquet
<a name="aws-glue-programming-python-samples-medicaid-writing"></a>

AWS Glue permet d'écrire facilement des données dans un format tel que Apache Parquet, que les bases de données relationnelles peuvent utiliser de manière efficace :

```
glueContext.write_dynamic_frame.from_options(
       frame = medicare_nest_dyf,
       connection_type = "s3",
       connection_options = {"path": "s3://glue-sample-target/output-dir/medicare_parquet"},
       format = "parquet")
```

# AWS Référence des PySpark extensions Glue
<a name="aws-glue-programming-python-extensions"></a>

AWS Glue a créé les extensions suivantes pour le dialecte PySpark Python.
+ [Accès aux paramètres à l'aide de `getResolvedOptions`](aws-glue-api-crawler-pyspark-extensions-get-resolved-options.md)
+ [PySpark types d'extensions](aws-glue-api-crawler-pyspark-extensions-types.md)
+ [DynamicFrame classe](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md)
+ [DynamicFrameCollection classe](aws-glue-api-crawler-pyspark-extensions-dynamic-frame-collection.md)
+ [DynamicFrameWriter classe](aws-glue-api-crawler-pyspark-extensions-dynamic-frame-writer.md)
+ [DynamicFrameReader classe](aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader.md)
+ [GlueContext classe](aws-glue-api-crawler-pyspark-extensions-glue-context.md)

# Accès aux paramètres à l'aide de `getResolvedOptions`
<a name="aws-glue-api-crawler-pyspark-extensions-get-resolved-options"></a>

La fonction utilitaire AWS Glue `getResolvedOptions(args, options)` vous donne accès aux arguments transmis à votre script lorsque vous exécutez une tâche. Pour utiliser cette fonction, commencez par l'importer à partir du module AWS Glue `utils`, avec le module `sys` :

```
import sys
from awsglue.utils import getResolvedOptions
```

**`getResolvedOptions(args, options)`**
+ `args` - Liste des arguments contenus dans `sys.argv`.
+ `options` - Tableau Python des noms d'arguments que vous souhaitez extraire.

**Example Récupération des arguments transmis à un JobRun**  
Supposons que vous ayez créé un JobRun dans un script, peut-être dans une fonction Lambda :  

```
response = client.start_job_run(
             JobName = 'my_test_Job',
             Arguments = {
               '--day_partition_key':   'partition_0',
               '--hour_partition_key':  'partition_1',
               '--day_partition_value':  day_partition_value,
               '--hour_partition_value': hour_partition_value } )
```
Pour extraire les arguments transmis, vous pouvez utiliser la fonction `getResolvedOptions` comme suit :  

```
import sys
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv,
                          ['JOB_NAME',
                           'day_partition_key',
                           'hour_partition_key',
                           'day_partition_value',
                           'hour_partition_value'])
print "The day-partition key is: ", args['day_partition_key']
print "and the day-partition value is: ", args['day_partition_value']
```
Notez que chaque argument est défini avec deux traits d'union au début, puis est référencé dans le script sans trait d'union. Les arguments utilisent uniquement des traits de soulignement, pas des traits d'union. Vos arguments doivent suivre cette convention pour être résolus.

# PySpark types d'extensions
<a name="aws-glue-api-crawler-pyspark-extensions-types"></a>

Les types utilisés par les AWS Glue PySpark extensions.

## DataType
<a name="aws-glue-api-crawler-pyspark-extensions-types-awsglue-datatype"></a>

Classe de base pour les autres types de AWS Glue.

**`__init__(properties={})`**
+ `properties` – Propriétés des types de données (facultatif).

 

**`typeName(cls)`**

Renvoie le type de la classe de type AWS Glue (c'est-à-dire, le nom de classe avec « Type » supprimé de la fin).
+ `cls` – Instance de classe AWS Glue dérivée de `DataType`.

 

`jsonValue( )`

Renvoie un objet JSON qui contient le type de données et les propriétés de la classe :

```
  {
    "dataType": typeName,
    "properties": properties
  }
```

## AtomicType et dérivés simples
<a name="aws-glue-api-crawler-pyspark-extensions-types-awsglue-atomictype"></a>

Hérite de la classe [DataType](#aws-glue-api-crawler-pyspark-extensions-types-awsglue-datatype) et l'étend, et sert de classe de base pour tous les types de données atomiques AWS Glue .

**`fromJsonValue(cls, json_value)`**

Initialise une instance de classe avec les valeurs d'un objet JSON.
+ `cls` – Instance de classe de type AWS Glue.
+ `json_value` – Objet JSON à partir duquel charger les paires clé-valeur.

 

Les types suivants sont des dérivés simples de la classe [AtomicType](#aws-glue-api-crawler-pyspark-extensions-types-awsglue-atomictype) :
+ `BinaryType` – Données binaires.
+ `BooleanType` – Valeurs booléennes.
+ `ByteType` – Valeur byte.
+ `DateType` – Valeur datetime.
+ `DoubleType` – Valeur double à virgule flottante.
+ `IntegerType` – Une valeur d'entier.
+ `LongType` - Entier long.
+ `NullType` – Valeur null.
+ `ShortType` – Entier court.
+ `StringType` – Chaîne texte.
+ `TimestampType` – Valeur timestamp (généralement en secondes à partir du 01/01/1970).
+ `UnknownType` – Valeur de type non identifié.

## DecimalType(AtomicType)
<a name="aws-glue-api-crawler-pyspark-extensions-types-awsglue-decimaltype"></a>

Hérite depuis la classe [AtomicType](#aws-glue-api-crawler-pyspark-extensions-types-awsglue-atomictype) et l'étend pour représenter un nombre décimal (nombre exprimé en décimales, par opposition aux nombres binaires de base 2).

**`__init__(precision=10, scale=2, properties={})`**
+ `precision` – Nombre de chiffres dans le nombre décimal (facultatif ; la valeur par défaut est 10).
+ `scale` – Nombre de chiffres à droite du point décimal (facultatif ; la valeur par défaut est 2).
+ `properties` – Propriétés du nombre décimal (facultatif).

## EnumType(AtomicType)
<a name="aws-glue-api-crawler-pyspark-extensions-types-awsglue-enumtype"></a>

Hérite de la classe [AtomicType](#aws-glue-api-crawler-pyspark-extensions-types-awsglue-atomictype) et l'étend pour représenter une énumération des options valides.

**`__init__(options)`**
+ `options` – Liste des options énumérées.

##  Types de collections
<a name="aws-glue-api-crawler-pyspark-extensions-types-awsglue-collections"></a>
+ [ArrayType(DataType)](#aws-glue-api-crawler-pyspark-extensions-types-awsglue-arraytype)
+ [ChoiceType(DataType)](#aws-glue-api-crawler-pyspark-extensions-types-awsglue-choicetype)
+ [MapType(DataType)](#aws-glue-api-crawler-pyspark-extensions-types-awsglue-maptype)
+ [Field(Object)](#aws-glue-api-crawler-pyspark-extensions-types-awsglue-field)
+ [StructType(DataType)](#aws-glue-api-crawler-pyspark-extensions-types-awsglue-structtype)
+ [EntityType(DataType)](#aws-glue-api-crawler-pyspark-extensions-types-awsglue-entitytype)

## ArrayType(DataType)
<a name="aws-glue-api-crawler-pyspark-extensions-types-awsglue-arraytype"></a>

**`__init__(elementType=UnknownType(), properties={})`**
+ `elementType`— Le type des éléments du tableau (facultatif ; la valeur par défaut est UnknownType).
+ `properties` – Propriétés du tableau (facultatif).

## ChoiceType(DataType)
<a name="aws-glue-api-crawler-pyspark-extensions-types-awsglue-choicetype"></a>

**`__init__(choices=[], properties={})`**
+ `choices` – Liste des choix possibles (facultatif).
+ `properties` – Propriétés de ces options (facultatif).

 

**`add(new_choice)`**

Ajoute un nouveau choix à la liste des choix possibles.
+ `new_choice` – Choix à ajouter à la liste des choix possibles.

 

**`merge(new_choices)`**

Fusionne une liste de nouveaux choix avec la liste de choix existantes.
+ `new_choices` – Liste des nouveaux choix à fusionner avec les choix existants.

## MapType(DataType)
<a name="aws-glue-api-crawler-pyspark-extensions-types-awsglue-maptype"></a>

**`__init__(valueType=UnknownType, properties={})`**
+ `valueType`— Le type de valeurs sur la carte (facultatif ; la valeur par défaut est UnknownType).
+ `properties` – Propriétés de la map (facultatif).

## Field(Object)
<a name="aws-glue-api-crawler-pyspark-extensions-types-awsglue-field"></a>

Crée un objet champ hors d'un objet qui dérive de [DataType](#aws-glue-api-crawler-pyspark-extensions-types-awsglue-datatype).

**`__init__(name, dataType, properties={})`**
+ `name` – Nom à attribuer au champ.
+ `dataType` – Objet à partir duquel créer un champ.
+ `properties` – Propriétés du champ (facultatif).

## StructType(DataType)
<a name="aws-glue-api-crawler-pyspark-extensions-types-awsglue-structtype"></a>

Définit une structure de données (`struct`).

**`__init__(fields=[], properties={})`**
+ `fields` – Liste des champs (de type `Field`) à inclure dans la structure (facultatif).
+ `properties` – Propriétés de la structure (facultatif).

 

**`add(field)`**
+ `field` – Objet de type `Field` à ajouter à la structure.

 

**`hasField(field)`**

Renvoie `True` si la structure dispose d'un champ du même nom, ou `False` si ce n'est pas le cas.
+ `field` – Nom de champ ou objet de type `Field` dont le nom est utilisé.

 

**`getField(field)`**
+ `field` – nom de champ ou objet de type `Field` dont le nom est utilisé. Si la structure a un champ du même nom, il est retourné.

## EntityType(DataType)
<a name="aws-glue-api-crawler-pyspark-extensions-types-awsglue-entitytype"></a>

`__init__(entity, base_type, properties)`

Cette classe n'a pas encore été implémentée.

##  Autres types
<a name="aws-glue-api-crawler-pyspark-extensions-types-awsglue-other-types"></a>
+ [DataSource(objet)](#aws-glue-api-crawler-pyspark-extensions-types-awsglue-data-source)
+ [DataSink(objet)](#aws-glue-api-crawler-pyspark-extensions-types-awsglue-data-sink)

## DataSource(objet)
<a name="aws-glue-api-crawler-pyspark-extensions-types-awsglue-data-source"></a>

**`__init__(j_source, sql_ctx, name)`**
+ `j_source` – Source de données.
+ `sql_ctx` – Contexte SQL.
+ `name` – Nom de la source de données.

 

**`setFormat(format, **options)`**
+ `format` – Format à définir pour la source de données.
+ `options` – Collection d'options à définir pour la source de données. Pour plus d'informations sur ces options de format, consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md).

 

`getFrame()`

Renvoie un `DynamicFrame` pour la source de données.

## DataSink(objet)
<a name="aws-glue-api-crawler-pyspark-extensions-types-awsglue-data-sink"></a>

**`__init__(j_sink, sql_ctx)`**
+ `j_sink` – Récepteur à créer.
+ `sql_ctx` – Contexte SQL pour le récepteur de données.

 

**`setFormat(format, **options)`**
+ `format` – Format à définir pour le récepteur de données.
+ `options` – Collection d'options à définir pour le récepteur de données. Pour plus d'informations sur ces options de format, consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md).

 

**`setAccumulableSize(size)`**
+ `size` – Taille cumulable à définir, en octets.

 

**`writeFrame(dynamic_frame, info="")`**
+ `dynamic_frame` – Objet `DynamicFrame` à écrire.
+ `info` – Informations sur l'objet `DynamicFrame` (facultatif).

 

**`write(dynamic_frame_or_dfc, info="")`**

Écrit un `DynamicFrame` ou un `DynamicFrameCollection`.
+ `dynamic_frame_or_dfc` – Objet `DynamicFrame` ou `DynamicFrameCollection` à écrire.
+ `info` – Informations sur le `DynamicFrame` ou `DynamicFrames` à écrire (facultatif).

# DynamicFrame classe
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame"></a>

L'une des principales abstractions dans Apache Spark est le `DataFrame` SparkSQL, ce qui est similaire à la construction `DataFrame` présente dans R et Pandas. A `DataFrame` est similaire à une table et prend en charge les opérations de style fonctionnel (map/reduce/filter/etc.) et les opérations SQL (sélection, projet, agrégation).

`DataFrames`Les sont puissants et largement utilisés, mais ils présentent des limitations au niveau des opérations d'extraction, de transformation et de chargement (opérations ETL). Cela signifie notamment qu'un schéma doit être spécifié avant tout chargement de données. Pour faire face à ce problème, SparkSQL effectue deux passages sur les données : un premier passage pour déduire le schéma et un second pour charger les données. Cependant, cette inférence est limitée et ne prend pas en compte la désorganisation des données. Par exemple, un même champ peut avoir différents types dans différents enregistrements. L'opération est souvent abandonnée par Apache Spark, qui indique que le type est `string` en tenant compte du texte du champ d'origine. Cette information peut être erronée et vous pouvez souhaiter exercer un meilleur contrôle sur la résolution des écarts entre les schémas. Et pour les ensembles de données volumineux, un passage supplémentaire sur les données source peut s'avérer hors de prix.

Pour remédier à ces limites, AWS Glue introduit le`DynamicFrame`. Un `DynamicFrame` est similaire à un `DataFrame`, mais chaque enregistrement y est auto-descriptif : initialement, aucun schéma n'est donc requis. AWS GlueCalcule plutôt un schéma on-the-fly lorsque cela est nécessaire et code explicitement les incohérences du schéma à l'aide d'un type de choix (ou d'union). Vous pouvez résoudre ces incohérences afin de rendre vos ensembles de données compatibles avec les magasins de données qui nécessitent un schéma fixe.

De même, un `DynamicRecord` représente un enregistrement logique au sein dans un `DynamicFrame`. Il est comparable à une ligne dans un `DataFrame` Spark, à la différence qu'il est auto-descriptif et peut être utilisé pour les données qui ne sont pas conformes à un schéma fixe. Lorsque vous utilisez AWS Glue with PySpark, vous ne manipulez généralement pas de manière indépendante`DynamicRecords`. Vous allez plutôt transformer le jeu de données par le biais de son `DynamicFrame`.

Vous pouvez convertir `DynamicFrames` vers et depuis `DataFrames` après la résolution des incohérences de schémas. 

##  – construction –
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-_constructing"></a>
+ [\$1\$1init\$1\$1](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-__init__)
+ [fromDF](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-fromDF)
+ [toDF](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-toDF)

## \$1\$1init\$1\$1
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-__init__"></a>

**`__init__(jdf, glue_ctx, name)`**
+ `jdf` – Référence à la trame de données dans la machine virtuelle Java (JVM).
+ `glue_ctx` – Un objet [GlueContext classe](aws-glue-api-crawler-pyspark-extensions-glue-context.md).
+ `name` – Nom de chaîne facultatif, vide par défaut.

## fromDF
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-fromDF"></a>

**`fromDF(dataframe, glue_ctx, name)`**

Convertit un `DataFrame` en `DynamicFrame` via la conversion de champs `DataFrame` en champs `DynamicRecord`. Renvoie un nouveau `DynamicFrame`.

Un `DynamicRecord` représente un enregistrement logique dans un `DynamicFrame`. Il est comparable à une ligne dans un `DataFrame` Spark, à la différence qu'il est auto-descriptif et peut être utilisé pour les données qui ne sont pas conformes à un schéma fixe.

Cette fonction s'attend à ce que les colonnes dont les noms sont dupliqués dans votre `DataFrame` aient déjà été résolues.
+ `dataframe` – `DataFrame` Apache Spark SQL à convertir (obligatoire).
+ `glue_ctx` – Objet [GlueContext classe](aws-glue-api-crawler-pyspark-extensions-glue-context.md) qui spécifie le contexte pour cette transformation (obligatoire).
+ `name`— Le nom du résultat `DynamicFrame` (facultatif depuis AWS Glue 3.0).

## toDF
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-toDF"></a>

**`toDF(options)`**

Convertit un `DynamicFrame` en `DataFrame` Apache Spark via la conversion de `DynamicRecords` en champs `DataFrame`. Renvoie un nouveau `DataFrame`.

Un `DynamicRecord` représente un enregistrement logique dans un `DynamicFrame`. Il est comparable à une ligne dans un `DataFrame` Spark, à la différence qu'il est auto-descriptif et peut être utilisé pour les données qui ne sont pas conformes à un schéma fixe.
+  `options`— Liste d'`ResolveOption`objets indiquant comment résoudre les types de choix lors de la conversion. Ce paramètre est utilisé pour gérer les incohérences du schéma, et non pour les options de format telles que l'analyse CSV. 

   Pour l'analyse CSV et les autres options de format, spécifiez-les dans la `from_options` méthode lors de sa création DynamicFrame, et non dans la `toDF` méthode. 

   Voici un exemple de la bonne façon de gérer les options de format CSV : 

  ```
  from awsglue.context import GlueContext
  from awsglue.dynamicframe import DynamicFrame
  from pyspark.context import SparkContext
  
  sc = SparkContext()
  glueContext = GlueContext(sc)
  
  # Correct: Specify format options in from_options
  csv_dyf = glueContext.create_dynamic_frame.from_options(
      connection_type="s3",
      connection_options={"paths": ["s3://my-bucket/path/to/csv/"]},
      format="csv",
      format_options={
          "withHeader": True,
          "separator": ",",
          "inferSchema": True
      }
  )
  
  # Convert to DataFrame (no format options needed here)
  csv_df = csv_dyf.toDF()
  ```

   Le `options` paramètre in `toDF` est spécifiquement destiné à la résolution des types de choix. Spécifiez le type de cible si vous choisissez le type d'action `Project` et `Cast`. Voici quelques exemples : 

  ```
  >>>toDF([ResolveOption("a.b.c", "KeepAsStruct")])
  >>>toDF([ResolveOption("a.b.c", "Project", DoubleType())])
  ```

##  – informations –
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-_informational"></a>
+ [count](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-count)
+ [schéma](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-schema)
+ [printSchema](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-printSchema)
+ [show](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-show)
+ [repartition](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-repartition)
+ [coalesce](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-coalesce)

## count
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-count"></a>

`count( )` – Renvoie le nombre de lignes dans le `DataFrame` sous-jacent.

## schéma
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-schema"></a>

`schema( )` – Renvoie le schéma de ce `DynamicFrame` ou, s'il n'est pas disponible, le schéma du `DataFrame` sous-jacent.

Pour plus d'informations sur les types de `DynamicFrame` qui composent ce schéma, consultez [PySpark types d'extensions](aws-glue-api-crawler-pyspark-extensions-types.md).

## printSchema
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-printSchema"></a>

`printSchema( )` – Imprime le schéma du `DataFrame` sous-jacent.

## show
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-show"></a>

`show(num_rows)` – Imprime un nombre de lignes spécifié du `DataFrame` sous-jacent.

## repartition
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-repartition"></a>

`repartition(numPartitions)` – renvoie un nouvel objet `DynamicFrame` avec des partitions `numPartitions`.

## coalesce
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-coalesce"></a>

`coalesce(numPartitions)` – renvoie un nouvel objet `DynamicFrame` avec des partitions `numPartitions`.

##  – transformations –
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-_transforms"></a>
+ [apply\$1mapping](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-apply_mapping)
+ [drop\$1fields](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-drop_fields)
+ [filtre](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-filter)
+ [joindre](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-join)
+ [map](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-map)
+ [mergeDynamicFrame](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-merge)
+ [relationalize](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-relationalize)
+ [rename\$1field](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-rename_field)
+ [resolveChoice](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-resolveChoice)
+ [select\$1fields](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-select_fields)
+ [spigot](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-spigot)
+ [split\$1fields](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-split_fields)
+ [split\$1rows](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-split_rows)
+ [unbox](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-unbox)
+ [union](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-union)
+ [unnest](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-unnest)
+ [unnest\$1ddb\$1json](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-unnest_ddb_json)
+ [write](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-write)

## apply\$1mapping
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-apply_mapping"></a>

**`apply_mapping(mappings, transformation_ctx="", info="", stageThreshold=0, totalThreshold=0)`**

Applique un mappage déclaratif à une image `DynamicFrame` et renvoie une nouvelle image `DynamicFrame` sur laquelle ces mappages sont appliqués. Les champs non spécifiés sont omis dans le nouveau`DynamicFrame`.
+ `mappings`— Une liste de tuples de mappage (obligatoire). Chacun étant composé comme suit : (colonne source, type source, colonne cible, type cible). 

  Si la colonne source comporte un point « `.` » dans le nom, vous devez l'entourer d'accents graves « ```` ». Par exemple, pour mapper `this.old.name` (chaîne) à `thisNewName`, vous devez utiliser le tuple suivant :

  ```
  ("`this.old.name`", "string", "thisNewName", "string")
  ```
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne à associer avec le signalement des erreurs pour cette transformation (facultatif).
+ `stageThreshold` – Nombre d'erreurs rencontrées pendant cette transformation et qui doit entraîner l’erreur générée par le processus (facultatif) La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.
+ `totalThreshold` – Nombre d'erreurs rencontrées jusqu'à cette transformation, incluse, et qui doit entraîner l'arrêt du processus (facultatif). La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.

### Exemple : Utilisez apply\$1mapping afin de renommer des champs ainsi que de modifier ses types
<a name="pyspark-apply_mapping-example"></a>

L'exemple de code suivant montre la `apply_mapping`méthode d’utilisation relative au renommage des champs sélectionnés ainsi qu’ à la modification des types de champs.

**Note**  
Pour accéder au jeu de données utilisé dans cet exemple, voir [Exemple de code : Données de jonction et de mise en relation](aws-glue-programming-python-samples-legislators.md) et suivez les instructions de la section[Étape 1 : analyser les données dans le compartiment Amazon S3](aws-glue-programming-python-samples-legislators.md#aws-glue-programming-python-samples-legislators-crawling).

```
# Example: Use apply_mapping to reshape source data into
# the desired column names and types as a new DynamicFrame

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Create a DynamicFrame and view its schema
persons = glueContext.create_dynamic_frame.from_catalog(
    database="legislators", table_name="persons_json"
)
print("Schema for the persons DynamicFrame:")
persons.printSchema()

# Select and rename fields, change field type
print("Schema for the persons_mapped DynamicFrame, created with apply_mapping:")
persons_mapped = persons.apply_mapping(
    [
        ("family_name", "String", "last_name", "String"),
        ("name", "String", "first_name", "String"),
        ("birth_date", "String", "date_of_birth", "Date"),
    ]
)
persons_mapped.printSchema()
```

#### Output
<a name="apply_mapping-example-output"></a>

```
Schema for the persons DynamicFrame:
root
|-- family_name: string
|-- name: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- gender: string
|-- image: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
|-- sort_name: string
|-- images: array
|    |-- element: struct
|    |    |-- url: string
|-- given_name: string
|-- birth_date: string
|-- id: string
|-- contact_details: array
|    |-- element: struct
|    |    |-- type: string
|    |    |-- value: string
|-- death_date: string

Schema for the persons_mapped DynamicFrame, created with apply_mapping:
root
|-- last_name: string
|-- first_name: string
|-- date_of_birth: date
```

## drop\$1fields
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-drop_fields"></a>

**`drop_fields(paths, transformation_ctx="", info="", stageThreshold=0, totalThreshold=0)`**

Appelle la transformation [FlatMap classe](aws-glue-api-crawler-pyspark-transforms-flat-map.md) afin de supprimer des champs d'un `DynamicFrame`. Renvoie un nouveau `DynamicFrame` avec les champs supprimés spécifiés.
+ `paths` - Une liste de chaînes. Chacune contient le chemin d'accès complet à un nœud de champ que vous souhaitez supprimer. Vous pouvez utiliser la notation par points pour spécifier des champs imbriqués. Par exemple, si le champ`first` est un enfant du champ `name`dans l'arborescence, vous spécifiez`"name.first"`pour le chemin d'accès.

  Si le nom d'un nœud de champ contient un `.` littéral, vous devez l'entourer d'accents graves (```).
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne à associer avec le signalement des erreurs pour cette transformation (facultatif).
+ `stageThreshold` – Nombre d'erreurs rencontrées pendant cette transformation et qui doit entraîner l’erreur générée par le processus (facultatif) La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.
+ `totalThreshold` – Nombre d'erreurs rencontrées jusqu'à cette transformation, incluse, et qui doit entraîner l'arrêt du processus (facultatif). La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.

### Exemple : utilisez supprimer les chams pour supprimer les champs d'un`DynamicFrame`
<a name="pyspark-drop_fields-example"></a>

Cet exemple de code utilise le`drop_fields`méthode pour supprimer les champs de niveau supérieur et imbriqués sélectionnés d'un`DynamicFrame`.

**Exemple de jeu de données**

L'exemple utilise l'ensemble de données suivant qui est représenté par`EXAMPLE-FRIENDS-DATA`table dans le code :

```
{"name": "Sally", "age": 23, "location": {"state": "WY", "county": "Fremont"}, "friends": []}
{"name": "Varun", "age": 34, "location": {"state": "NE", "county": "Douglas"}, "friends": [{"name": "Arjun", "age": 3}]}
{"name": "George", "age": 52, "location": {"state": "NY"}, "friends": [{"name": "Fred"}, {"name": "Amy", "age": 15}]}
{"name": "Haruki", "age": 21, "location": {"state": "AK", "county": "Denali"}}
{"name": "Sheila", "age": 63, "friends": [{"name": "Nancy", "age": 22}]}
```

**Exemple de code**

```
# Example: Use drop_fields to remove top-level and nested fields from a DynamicFrame.
# Replace MY-EXAMPLE-DATABASE with your Glue Data Catalog database name.
# Replace EXAMPLE-FRIENDS-DATA with your table name.

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Create a DynamicFrame from Glue Data Catalog
glue_source_database = "MY-EXAMPLE-DATABASE"
glue_source_table = "EXAMPLE-FRIENDS-DATA"

friends = glueContext.create_dynamic_frame.from_catalog(
    database=glue_source_database, table_name=glue_source_table
)
print("Schema for friends DynamicFrame before calling drop_fields:")
friends.printSchema()

# Remove location.county, remove friends.age, remove age
friends = friends.drop_fields(paths=["age", "location.county", "friends.age"])
print("Schema for friends DynamicFrame after removing age, county, and friend age:")
friends.printSchema()
```

#### Output
<a name="drop_fields-example-output"></a>

```
Schema for friends DynamicFrame before calling drop_fields:
root
|-- name: string
|-- age: int
|-- location: struct
|    |-- state: string
|    |-- county: string
|-- friends: array
|    |-- element: struct
|    |    |-- name: string
|    |    |-- age: int

Schema for friends DynamicFrame after removing age, county, and friend age:
root
|-- name: string
|-- location: struct
|    |-- state: string
|-- friends: array
|    |-- element: struct
|    |    |-- name: string
```

## filtre
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-filter"></a>

**`filter(f, transformation_ctx="", info="", stageThreshold=0, totalThreshold=0)`**

Renvoie un nouveau `DynamicFrame` contien tout `DynamicRecords` de l'entrée `DynamicFrame` qui correspondent à la fonction de prédicat `f`.
+ `f` – Fonction de prédicat à appliquer au paramètre `DynamicFrame`. La fonction doit prendre un `DynamicRecord` en tant qu'argument et renvoyer la valeur True si le `DynamicRecord` répond aux critères du filtre, ou la valeur False si ce n'est pas le cas (obligatoire).

  Un `DynamicRecord` représente un enregistrement logique dans un `DynamicFrame`. Il est comparable à une ligne dans un Spark `DataFrame`, à la différence qu'il est auto-descriptif et peut être utilisé pour les données qui ne sont pas conformes à un schéma fixe.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne à associer avec le signalement des erreurs pour cette transformation (facultatif).
+ `stageThreshold` – Nombre d'erreurs rencontrées pendant cette transformation et qui doit entraîner l’erreur générée par le processus (facultatif) La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.
+ `totalThreshold` – Nombre d'erreurs rencontrées jusqu'à cette transformation, incluse, et qui doit entraîner l'arrêt du processus (facultatif). La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.

### Exemple  : Utiliser un filtre pour obtenir une sélection de champs filtrée
<a name="pyspark-filter-example"></a>

Cet exemple utilise le`filter` Méthode de création d'un nouveau`DynamicFrame`qui inclut une sélection filtrée d'un autre `DynamicFrame` des champs. 

Comme le `map` Méthode, `filter` prend une fonction comme argument qui est appliquée à chaque enregistrement de l'original`DynamicFrame`. La fonction prend un enregistrement en entrée et renvoie une valeur booléenne. Si la valeur de retour est vraie, l'enregistrement est inclus dans le résultat`DynamicFrame`. Si c'est faux, le dossier est omis.

**Note**  
Pour accéder au jeu de données utilisé dans cet exemple, voir [Exemple de code : préparation des données à l'aide ResolveChoice de Lambda et ApplyMapping](aws-glue-programming-python-samples-medicaid.md) et suivez les instructions de la section[Étape 1 : analyser les données dans le compartiment Amazon S3](aws-glue-programming-python-samples-medicaid.md#aws-glue-programming-python-samples-medicaid-crawling).

```
# Example: Use filter to create a new DynamicFrame
# with a filtered selection of records

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Create DynamicFrame from Glue Data Catalog
medicare = glueContext.create_dynamic_frame.from_options(
    "s3",
    {
        "paths": [
            "s3://awsglue-datasets/examples/medicare/Medicare_Hospital_Provider.csv"
        ]
    },
    "csv",
    {"withHeader": True},
)

# Create filtered DynamicFrame with custom lambda
# to filter records by Provider State and Provider City
sac_or_mon = medicare.filter(
    f=lambda x: x["Provider State"] in ["CA", "AL"]
    and x["Provider City"] in ["SACRAMENTO", "MONTGOMERY"]
)

# Compare record counts
print("Unfiltered record count: ", medicare.count())
print("Filtered record count:  ", sac_or_mon.count())
```

#### Output
<a name="filter-example-output"></a>

```
Unfiltered record count:  163065
Filtered record count:   564
```

## joindre
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-join"></a>

**`join(paths1, paths2, frame2, transformation_ctx="", info="", stageThreshold=0, totalThreshold=0)`**

Effectue une jointure d'égalité avec un autre `DynamicFrame` et renvoie le `DynamicFrame` obtenu.
+ `paths1` – Liste des clés dans cette trame à joindre.
+ `paths2` – Liste des clés dans l'autre trame à joindre.
+ `frame2` – Autre `DynamicFrame` à joindre.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne à associer avec le signalement des erreurs pour cette transformation (facultatif).
+ `stageThreshold` – Nombre d'erreurs rencontrées pendant cette transformation et qui doit entraîner l’erreur générée par le processus (facultatif) La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.
+ `totalThreshold` – Nombre d'erreurs rencontrées jusqu'à cette transformation, incluse, et qui doit entraîner l'arrêt du processus (facultatif). La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.

### Exemple : Utiliser la jointure pour combiner`DynamicFrames`
<a name="pyspark-join-example"></a>

Cet exemple utilise la `join` méthode pour effectuer une jointure sur trois`DynamicFrames`. AWS Glue effectue la jointure en fonction des clés de champ que vous fournissez. Le résultat `DynamicFrame` contient les lignes des deux cadres d'origine où les clés spécifiées correspondent.

Notez que le`join`transform conserve tous les champs intacts. Cela signifie que les champs que vous spécifiez comme correspondants apparaissent dans le résultat DynamicFrame, même s'ils sont redondants et contiennent les mêmes clés. Dans cet exemple, nous utilisons`drop_fields`pour supprimer ces clés redondantes après la jointure.

**Note**  
Pour accéder au jeu de données utilisé dans cet exemple, voir [Exemple de code : Données de jonction et de mise en relation](aws-glue-programming-python-samples-legislators.md) et suivez les instructions de la section[Étape 1 : analyser les données dans le compartiment Amazon S3](aws-glue-programming-python-samples-legislators.md#aws-glue-programming-python-samples-legislators-crawling).

```
# Example: Use join to combine data from three DynamicFrames

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Load DynamicFrames from Glue Data Catalog
persons = glueContext.create_dynamic_frame.from_catalog(
    database="legislators", table_name="persons_json"
)
memberships = glueContext.create_dynamic_frame.from_catalog(
    database="legislators", table_name="memberships_json"
)
orgs = glueContext.create_dynamic_frame.from_catalog(
    database="legislators", table_name="organizations_json"
)
print("Schema for the persons DynamicFrame:")
persons.printSchema()
print("Schema for the memberships DynamicFrame:")
memberships.printSchema()
print("Schema for the orgs DynamicFrame:")
orgs.printSchema()

# Join persons and memberships by ID
persons_memberships = persons.join(
    paths1=["id"], paths2=["person_id"], frame2=memberships
)

# Rename and drop fields from orgs
# to prevent field name collisions with persons_memberships
orgs = (
    orgs.drop_fields(["other_names", "identifiers"])
    .rename_field("id", "org_id")
    .rename_field("name", "org_name")
)

# Create final join of all three DynamicFrames
legislators_combined = orgs.join(
    paths1=["org_id"], paths2=["organization_id"], frame2=persons_memberships
).drop_fields(["person_id", "org_id"])

# Inspect the schema for the joined data
print("Schema for the new legislators_combined DynamicFrame:")
legislators_combined.printSchema()
```

#### Output
<a name="join-example-output"></a>

```
Schema for the persons DynamicFrame:
root
|-- family_name: string
|-- name: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- gender: string
|-- image: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
|-- sort_name: string
|-- images: array
|    |-- element: struct
|    |    |-- url: string
|-- given_name: string
|-- birth_date: string
|-- id: string
|-- contact_details: array
|    |-- element: struct
|    |    |-- type: string
|    |    |-- value: string
|-- death_date: string

Schema for the memberships DynamicFrame:
root
|-- area_id: string
|-- on_behalf_of_id: string
|-- organization_id: string
|-- role: string
|-- person_id: string
|-- legislative_period_id: string
|-- start_date: string
|-- end_date: string

Schema for the orgs DynamicFrame:
root
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
|-- id: string
|-- classification: string
|-- name: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- image: string
|-- seats: int
|-- type: string

Schema for the new legislators_combined DynamicFrame:
root
|-- role: string
|-- seats: int
|-- org_name: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- type: string
|-- sort_name: string
|-- area_id: string
|-- images: array
|    |-- element: struct
|    |    |-- url: string
|-- on_behalf_of_id: string
|-- other_names: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- name: string
|    |    |-- lang: string
|-- contact_details: array
|    |-- element: struct
|    |    |-- type: string
|    |    |-- value: string
|-- name: string
|-- birth_date: string
|-- organization_id: string
|-- gender: string
|-- classification: string
|-- legislative_period_id: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- image: string
|-- given_name: string
|-- start_date: string
|-- family_name: string
|-- id: string
|-- death_date: string
|-- end_date: string
```

## map
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-map"></a>

**`map(f, transformation_ctx="", info="", stageThreshold=0, totalThreshold=0)`**

Renvoie un nouveau `DynamicFrame` qui résulte de l'application de la fonction de mappage spécifiée à tous les enregistrements dans le `DynamicFrame` d'origine.
+ `f` – Fonction de mappage à appliquer à tous les enregistrements dans le paramètre `DynamicFrame`. La fonction doit prendre un `DynamicRecord` comme argument et renvoyer un nouveau `DynamicRecord` (obligatoire).

  Un `DynamicRecord` représente un enregistrement logique dans un `DynamicFrame`. Il est comparable à une ligne dans un `DataFrame` Apache Spark, à la différence qu'il est auto-descriptif et peut être utilisé pour les données qui ne sont pas conformes à un schéma fixe.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée.(facultatif) La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté.(facultatif) La valeur par défaut est zéro.

### Exemple : utilisez la carte pour appliquer une fonction à chaque enregistrement dans un `DynamicFrame`
<a name="pyspark-map-example"></a>

Cet exemple illustre comment utiliser `map` méthode pour appliquer une fonction à chaque enregistrement d'un `DynamicFrame`. Plus précisément, cet exemple applique une fonction appelée `MergeAddress` à chaque enregistrement afin de fusionner plusieurs champs d'adresse en un seul `struct` type.

**Note**  
Pour accéder au jeu de données utilisé dans cet exemple, voir [Exemple de code : préparation des données à l'aide ResolveChoice de Lambda et ApplyMapping](aws-glue-programming-python-samples-medicaid.md) et suivez les instructions de la section[Étape 1 : analyser les données dans le compartiment Amazon S3](aws-glue-programming-python-samples-medicaid.md#aws-glue-programming-python-samples-medicaid-crawling).

```
# Example: Use map to combine fields in all records
# of a DynamicFrame

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Create a DynamicFrame and view its schema
medicare = glueContext.create_dynamic_frame.from_options(
        "s3",
        {"paths": ["s3://awsglue-datasets/examples/medicare/Medicare_Hospital_Provider.csv"]},
        "csv",
        {"withHeader": True})
print("Schema for medicare DynamicFrame:")
medicare.printSchema()

# Define a function to supply to the map transform
# that merges address fields into a single field
def MergeAddress(rec):
  rec["Address"] = {}
  rec["Address"]["Street"] = rec["Provider Street Address"]
  rec["Address"]["City"] = rec["Provider City"]
  rec["Address"]["State"] = rec["Provider State"]
  rec["Address"]["Zip.Code"] = rec["Provider Zip Code"]
  rec["Address"]["Array"] = [rec["Provider Street Address"], rec["Provider City"], rec["Provider State"], rec["Provider Zip Code"]]
  del rec["Provider Street Address"]
  del rec["Provider City"]
  del rec["Provider State"]
  del rec["Provider Zip Code"]
  return rec


# Use map to apply MergeAddress to every record
mapped_medicare = medicare.map(f = MergeAddress)
print("Schema for mapped_medicare DynamicFrame:")
mapped_medicare.printSchema()
```

#### Output
<a name="map-example-output"></a>

```
Schema for medicare DynamicFrame:
root
|-- DRG Definition: string
|-- Provider Id: string
|-- Provider Name: string
|-- Provider Street Address: string
|-- Provider City: string
|-- Provider State: string
|-- Provider Zip Code: string
|-- Hospital Referral Region Description: string
|-- Total Discharges: string
|-- Average Covered Charges: string
|-- Average Total Payments: string
|-- Average Medicare Payments: string

Schema for mapped_medicare DynamicFrame:
root
|-- Average Total Payments: string
|-- Average Covered Charges: string
|-- DRG Definition: string
|-- Average Medicare Payments: string
|-- Hospital Referral Region Description: string
|-- Address: struct
|    |-- Zip.Code: string
|    |-- City: string
|    |-- Array: array
|    |    |-- element: string
|    |-- State: string
|    |-- Street: string
|-- Provider Id: string
|-- Total Discharges: string
|-- Provider Name: string
```

## mergeDynamicFrame
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-merge"></a>

**`mergeDynamicFrame(stage_dynamic_frame, primary_keys, transformation_ctx = "", options = {}, info = "", stageThreshold = 0, totalThreshold = 0)`**

Fusionne cette trame `DynamicFrame` avec une trame `DynamicFrame` intermédiaire basée sur les clés primaires spécifiées pour identifier les enregistrements. Les registres en double (registres avec les mêmes clés primaires) ne sont pas dédupliqués. Si aucun enregistrement ne correspond dans la trame intermédiaire, tous les enregistrements (y compris les doublons) sont conservés dans la source. Si la trame intermédiaire contient des enregistrements correspondants, les enregistrements de la trame intermédiaire remplacent ceux de la source dans AWS Glue.
+ `stage_dynamic_frame` – trame `DynamicFrame` intermédiaire à fusionner.
+ `primary_keys` – liste des champs de clé primaire permettant de faire correspondre les enregistrements des trames dynamiques source et intermédiaire.
+ `transformation_ctx` – chaîne unique utilisée pour récupérer les métadonnées relatives à la transformation en cours (facultatif).
+ `options` – chaîne de paires nom-valeur JSON qui fournissent des informations supplémentaires pour cette transformation. Cet argument n'est actuellement pas utilisé.
+ `info` – A `String`. Toute chaîne à associer à des erreurs dans cette transformation.
+ `stageThreshold` – A `Long`. Nombre d'erreurs identifiées dans la transformation donnée et à corriger lors du traitement.
+ `totalThreshold` – A `Long`. Nombre total d'erreurs identifiées dans la transformation donnée et qui doivent être corrigées lors du traitement.

La méthode renvoie une nouvelle image `DynamicFrame` obtenue en fusionnant `DynamicFrame` avec l'image `DynamicFrame` intermédiaire.

La trame `DynamicFrame` renvoyée contient l'enregistrement A dans les cas suivants :
+ Si `A` se trouve à la fois dans la trame source et la trame intermédiaire, c'est la valeur `A` de la trame intermédiaire qui est renvoyée.
+ Si `A` se trouve dans la table source et si `A.primaryKeys` ne se trouve pas dans l'image `stagingDynamicFrame`, `A` n'est pas mis à jour dans la table intermédiaire.

L'image source et l'image intermédiaire n'ont pas besoin d'avoir le même schéma.

### Exemple : mergeDynamicFrame à utiliser pour fusionner deux `DynamicFrames` en fonction d'une clé primaire
<a name="pyspark-mergeDynamicFrame-example"></a>

L'exemple de code suivant montre comment utiliser la méthode `mergeDynamicFrame` pour fusionner une image `DynamicFrame` avec une image `DynamicFrame` « intermédiaire », sur la base de la clé primaire `id`.

**Exemple de jeu de données**

L'exemple utilise deux images `DynamicFrames` d'une collection `DynamicFrameCollection` appelée `split_rows_collection`. Vous trouverez ci-dessous la liste des clés de la collection `split_rows_collection`.

```
dict_keys(['high', 'low'])
```

**Exemple de code**

```
# Example: Use mergeDynamicFrame to merge DynamicFrames
# based on a set of specified primary keys

from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.transforms import SelectFromCollection

# Inspect the original DynamicFrames
frame_low = SelectFromCollection.apply(dfc=split_rows_collection, key="low")
print("Inspect the DynamicFrame that contains rows where ID < 10")
frame_low.toDF().show()

frame_high = SelectFromCollection.apply(dfc=split_rows_collection, key="high")
print("Inspect the DynamicFrame that contains rows where ID > 10")
frame_high.toDF().show()

# Merge the DynamicFrames based on the "id" primary key
merged_high_low = frame_high.mergeDynamicFrame(
    stage_dynamic_frame=frame_low, primary_keys=["id"]
)

# View the results where the ID is 1 or 20
print("Inspect the merged DynamicFrame that contains the combined rows")
merged_high_low.toDF().where("id = 1 or id= 20").orderBy("id").show()
```

#### Output
<a name="mergeDynamicFrame-example-output"></a>

```
Inspect the DynamicFrame that contains rows where ID < 10
+---+-----+------------------------+-------------------------+
| id|index|contact_details.val.type|contact_details.val.value|
+---+-----+------------------------+-------------------------+
|  1|    0|                     fax|             202-225-3307|
|  1|    1|                   phone|             202-225-5731|
|  2|    0|                     fax|             202-225-3307|
|  2|    1|                   phone|             202-225-5731|
|  3|    0|                     fax|             202-225-3307|
|  3|    1|                   phone|             202-225-5731|
|  4|    0|                     fax|             202-225-3307|
|  4|    1|                   phone|             202-225-5731|
|  5|    0|                     fax|             202-225-3307|
|  5|    1|                   phone|             202-225-5731|
|  6|    0|                     fax|             202-225-3307|
|  6|    1|                   phone|             202-225-5731|
|  7|    0|                     fax|             202-225-3307|
|  7|    1|                   phone|             202-225-5731|
|  8|    0|                     fax|             202-225-3307|
|  8|    1|                   phone|             202-225-5731|
|  9|    0|                     fax|             202-225-3307|
|  9|    1|                   phone|             202-225-5731|
| 10|    0|                     fax|             202-225-6328|
| 10|    1|                   phone|             202-225-4576|
+---+-----+------------------------+-------------------------+
only showing top 20 rows

Inspect the DynamicFrame that contains rows where ID > 10
+---+-----+------------------------+-------------------------+
| id|index|contact_details.val.type|contact_details.val.value|
+---+-----+------------------------+-------------------------+
| 11|    0|                     fax|             202-225-6328|
| 11|    1|                   phone|             202-225-4576|
| 11|    2|                 twitter|           RepTrentFranks|
| 12|    0|                     fax|             202-225-6328|
| 12|    1|                   phone|             202-225-4576|
| 12|    2|                 twitter|           RepTrentFranks|
| 13|    0|                     fax|             202-225-6328|
| 13|    1|                   phone|             202-225-4576|
| 13|    2|                 twitter|           RepTrentFranks|
| 14|    0|                     fax|             202-225-6328|
| 14|    1|                   phone|             202-225-4576|
| 14|    2|                 twitter|           RepTrentFranks|
| 15|    0|                     fax|             202-225-6328|
| 15|    1|                   phone|             202-225-4576|
| 15|    2|                 twitter|           RepTrentFranks|
| 16|    0|                     fax|             202-225-6328|
| 16|    1|                   phone|             202-225-4576|
| 16|    2|                 twitter|           RepTrentFranks|
| 17|    0|                     fax|             202-225-6328|
| 17|    1|                   phone|             202-225-4576|
+---+-----+------------------------+-------------------------+
only showing top 20 rows

Inspect the merged DynamicFrame that contains the combined rows
+---+-----+------------------------+-------------------------+
| id|index|contact_details.val.type|contact_details.val.value|
+---+-----+------------------------+-------------------------+
|  1|    0|                     fax|             202-225-3307|
|  1|    1|                   phone|             202-225-5731|
| 20|    0|                     fax|             202-225-5604|
| 20|    1|                   phone|             202-225-6536|
| 20|    2|                 twitter|                USRepLong|
+---+-----+------------------------+-------------------------+
```

## relationalize
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-relationalize"></a>

**`relationalize(root_table_name, staging_path, options, transformation_ctx="", info="", stageThreshold=0, totalThreshold=0)`**

Convertit une image `DynamicFrame` sous une forme adaptée à une base de données relationnelle. La mise en relation d'une image `DynamicFrame` est particulièrement utile lorsque vous souhaitez déplacer des données d'un environnement NoSQL tel que DynamoDB vers une base de données relationnelle telle que MySQL.

La transformation génère une liste des images en désimbriquant les colonnes imbriquées et en faisant pivoter les colonnes de tableau. Vous pouvez joindre les colonnes du tableau ayant été pivotées à l'aide de la clé générée au cours de la phase de désimbrication.
+ `root_table_name` – Nom de la table racine.
+ `staging_path` – Chemin d'accès auquel la méthode peut stocker des partitions des tables dynamiques au format CSV format (facultatif). Les tables dynamiques sont lues à partir de ce chemin.
+ `options` – Dictionnaire des paramètres facultatifs.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne à associer avec le signalement des erreurs pour cette transformation (facultatif).
+ `stageThreshold` – Nombre d'erreurs rencontrées pendant cette transformation et qui doit entraîner l’erreur générée par le processus (facultatif) La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.
+ `totalThreshold` – Nombre d'erreurs rencontrées jusqu'à cette transformation, incluse, et qui doit entraîner l'arrêt du processus (facultatif). La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.

### Exemple : utiliser la méthode relationalize pour aplatir un schéma imbriqué dans une image `DynamicFrame`
<a name="pyspark-relationalize-example"></a>

Cet exemple de code utilise la méthode `relationalize` pour aplatir un schéma imbriqué sous une forme adaptée à une base de données relationnelle.

**Exemple de jeu de données**

L'exemple utilise une image `DynamicFrame` appelée `legislators_combined` avec le schéma suivant. `legislators_combined` possède plusieurs champs imbriqués tels que `links`, `images` et `contact_details`, qui seront aplatis par la transformation `relationalize`.

```
root
|-- role: string
|-- seats: int
|-- org_name: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- type: string
|-- sort_name: string
|-- area_id: string
|-- images: array
|    |-- element: struct
|    |    |-- url: string
|-- on_behalf_of_id: string
|-- other_names: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- name: string
|    |    |-- lang: string
|-- contact_details: array
|    |-- element: struct
|    |    |-- type: string
|    |    |-- value: string
|-- name: string
|-- birth_date: string
|-- organization_id: string
|-- gender: string
|-- classification: string
|-- legislative_period_id: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- image: string
|-- given_name: string
|-- start_date: string
|-- family_name: string
|-- id: string
|-- death_date: string
|-- end_date: string
```

**Exemple de code**

```
# Example: Use relationalize to flatten
# a nested schema into a format that fits
# into a relational database.
# Replace DOC-EXAMPLE-S3-BUCKET/tmpDir with your own location.

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Apply relationalize and inspect new tables
legislators_relationalized = legislators_combined.relationalize(
    "l_root", "s3://DOC-EXAMPLE-BUCKET/tmpDir"
)
legislators_relationalized.keys()

# Compare the schema of the contact_details
# nested field to the new relationalized table that
# represents it
legislators_combined.select_fields("contact_details").printSchema()
legislators_relationalized.select("l_root_contact_details").toDF().where(
    "id = 10 or id = 75"
).orderBy(["id", "index"]).show()
```

#### Output
<a name="relationalize-example-output"></a>

La sortie suivante vous permet de comparer le schéma du champ imbriqué appelé `contact_details` à la table créée par la transformation `relationalize`. Notez que les enregistrements de la table renvoient vers la table principale à l'aide d'une clé étrangère appelée `id` et d'une colonne `index` représentant les positions du tableau.

```
dict_keys(['l_root', 'l_root_images', 'l_root_links', 'l_root_other_names', 'l_root_contact_details', 'l_root_identifiers'])

root
|-- contact_details: array
|    |-- element: struct
|    |    |-- type: string
|    |    |-- value: string

+---+-----+------------------------+-------------------------+
| id|index|contact_details.val.type|contact_details.val.value|
+---+-----+------------------------+-------------------------+
| 10|    0|                     fax|             202-225-4160|
| 10|    1|                   phone|             202-225-3436|
| 75|    0|                     fax|             202-225-6791|
| 75|    1|                   phone|             202-225-2861|
| 75|    2|                 twitter|               RepSamFarr|
+---+-----+------------------------+-------------------------+
```

## rename\$1field
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-rename_field"></a>

**`rename_field(oldName, newName, transformation_ctx="", info="", stageThreshold=0, totalThreshold=0)`**

Renomme un champ dans ce `DynamicFrame` et renvoie un nouveau `DynamicFrame` avec le champ renommé.
+ `oldName` – Chemin d'accès complet au nœud que vous souhaitez renommer.

  Si l'ancien nom contient des points, `RenameField` ne fonctionne pas à moins que vous ne le délimitiez avec des apostrophes inverses (```). Par exemple, pour remplacer `this.old.name` par `thisNewName`, vous devez appeler rename\$1field comme suit.

  ```
  newDyF = oldDyF.rename_field("`this.old.name`", "thisNewName")
  ```
+ `newName` – Nouveau nom, sous forme de chemin d'accès complet.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne à associer avec le signalement des erreurs pour cette transformation (facultatif).
+ `stageThreshold` – Nombre d'erreurs rencontrées pendant cette transformation et qui doit entraîner l’erreur générée par le processus (facultatif) La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.
+ `totalThreshold` – Nombre d'erreurs rencontrées jusqu'à cette transformation, incluse, et qui doit entraîner l'arrêt du processus (facultatif). La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.

### Exemple : utiliser la méthode rename\$1field pour renommer des champs dans une image `DynamicFrame`
<a name="pyspark-rename_field-example"></a>

Cet exemple de code utilise la méthode `rename_field` pour renommer les champs dans une image `DynamicFrame`. Notez que l'exemple utilise le chaînage de méthode pour renommer plusieurs champs en même temps.

**Note**  
Pour accéder au jeu de données utilisé dans cet exemple, voir [Exemple de code : Données de jonction et de mise en relation](aws-glue-programming-python-samples-legislators.md) et suivez les instructions de la section[Étape 1 : analyser les données dans le compartiment Amazon S3](aws-glue-programming-python-samples-legislators.md#aws-glue-programming-python-samples-legislators-crawling).

**Exemple de code**

```
# Example: Use rename_field to rename fields
# in a DynamicFrame

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Inspect the original orgs schema
orgs = glueContext.create_dynamic_frame.from_catalog(
    database="legislators", table_name="organizations_json"
)
print("Original orgs schema: ")
orgs.printSchema()

# Rename fields and view the new schema
orgs = orgs.rename_field("id", "org_id").rename_field("name", "org_name")
print("New orgs schema with renamed fields: ")
orgs.printSchema()
```

#### Output
<a name="rename_field-example-output"></a>

```
Original orgs schema: 
root
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
|-- id: string
|-- classification: string
|-- name: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- image: string
|-- seats: int
|-- type: string

New orgs schema with renamed fields: 
root
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
|-- classification: string
|-- org_id: string
|-- org_name: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- image: string
|-- seats: int
|-- type: string
```

## resolveChoice
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-resolveChoice"></a>

**`resolveChoice(specs = None, choice = "" , database = None , table_name = None , transformation_ctx="", info="", stageThreshold=0, totalThreshold=0, catalog_id = None)`**

Résout un type de choix au sein de ce `DynamicFrame` et renvoie le nouveau `DynamicFrame`.
+ `specs` – Liste d'ambiguïtés spécifiques à résoudre, apparaissant sous forme de tuple: `(field_path, action)`. 

  Il existe deux façons d'utiliser `resolveChoice`. La première consiste à utiliser l'argument `specs` pour spécifier une séquence de champs spécifiques et la façon de les résoudre. L'autre mode pour `resolveChoice` consiste à utiliser l'argument `choice` afin de spécifier une seule résolution pour tous les `ChoiceTypes`.

  Les valeurs pour `specs` sont spécifiées en tant que tuples composés de paires `(field_path, action)`. La valeur `field_path` identifie un élément ambigu spécifique, et la valeur `action` identifie la résolution correspondante. Les actions possibles sont les suivantes : 
  + `cast:type` – tente de convertir toutes les valeurs vers le type spécifié. Par exemple : `cast:int`.
  + `make_cols` – Convertit chaque type distinct en une colonne avec le nom `columnName_type`. Résout une ambiguïté potentielle en aplatissant les données. Par exemple, si `columnA` peut être un `int` ou un `string`, la résolution consisterait à produire deux colonnes nommées `columnA_int` et `columnA_string` dans le `DynamicFrame` obtenu.
  + `make_struct` – résout une ambigüité potentielle en utilisant un `struct` pour représenter les données. Par exemple, si des données d'une colonne peuvent être de type `int` ou `string`, l'action `make_struct` produit une colonne de structures dans l'image `DynamicFrame` obtenue. Chaque structure contient à la fois des données de type `int` et des données de type `string`.
  + `project:type` – résout une ambiguïté potentielle en projetant toutes les données sur l'un des types de données possibles. Par exemple, si des données d'une colonne peuvent être un `int` ou un `string`, une action `project:string` produit une colonne dans le `DynamicFrame` obtenu, où toutes les valeurs `int` ont été converties en chaînes.

  Si le `field_path` identifie un tableau, placez des crochets vides après le nom du tableau pour éviter toute ambiguïté. Par exemple, supposons que vous travailliez avec les données structurées comme suit :

  ```
  "myList": [
    { "price": 100.00 },
    { "price": "$100.00" }
  ]
  ```

  Vous pouvez sélectionner la version numérique plutôt que la version chaîne du prix en définissant `field_path` sur `"myList[].price"` et `action` sur `"cast:double"`.
**Note**  
Vous ne pouvez utiliser qu'un seul des paramètres `specs` et `choice`. Si le paramètre `specs` n'est pas `None`, alors le paramètre `choice` doit être une chaîne vide. Inversement, si le paramètre `choice` n'est pas une chaîne vide, alors le paramètre `specs` doit être `None`. 
+ `choice` – spécifie une résolution unique pour tous les `ChoiceTypes`. Vous pouvez utiliser cela lorsque la liste complète des `ChoiceTypes` est inconnue avant l'exécution. En plus des actions répertoriées précédemment pour `specs`, cet argument prend également en charge l'action suivante :
  + `match_catalog` – tente de convertir chaque `ChoiceType` dans le type correspondant de table Data Catalog spécifiée. 
+ `database` – base de données Data Catalog à utiliser avec l'action `match_catalog`.
+ `table_name` – table Data Catalog à utiliser avec l'action `match_catalog`.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne à associer avec le signalement des erreurs pour cette transformation (facultatif).
+ `stageThreshold` – Nombre d'erreurs rencontrées pendant cette transformation et qui doit entraîner l’erreur générée par le processus (facultatif) La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.
+ `totalThreshold` – Nombre d'erreurs rencontrées jusqu'à cette transformation incluse, et qui doit entraîner l'arrêt du processus (facultatif). La valeur par défaut est zéro, ce qui indique que le processus ne doit pas être arrêté dans ce cas.
+ `catalog_id` – ID du catalogue Data Catalog auquel vous accédez (ID du compte Data Catalog). Lorsque cette option est définie sur `None` (valeur par défaut), l'ID de catalogue du compte appelant est utilisé. 

### Exemple : utiliser la méthode resolveChoice pour gérer une colonne contenant plusieurs types
<a name="pyspark-resolveChoice-example"></a>

Cet exemple de code utilise la méthode `resolveChoice` pour spécifier comment gérer une colonne `DynamicFrame` contenant des valeurs de plusieurs types. L'exemple montre deux méthodes courantes pour gérer une colonne de types différents :
+ Convertir la colonne en un seul type de données.
+ Conserver tous les types dans des colonnes distinctes.

**Exemple de jeu de données**

**Note**  
Pour accéder au jeu de données utilisé dans cet exemple, voir [Exemple de code : préparation des données à l'aide ResolveChoice de Lambda et ApplyMapping](aws-glue-programming-python-samples-medicaid.md) et suivez les instructions de la section[Étape 1 : analyser les données dans le compartiment Amazon S3](aws-glue-programming-python-samples-medicaid.md#aws-glue-programming-python-samples-medicaid-crawling).

L'exemple utilise une image `DynamicFrame` appelée `medicare` avec le schéma suivant :

```
root
|-- drg definition: string
|-- provider id: choice
|    |-- long
|    |-- string
|-- provider name: string
|-- provider street address: string
|-- provider city: string
|-- provider state: string
|-- provider zip code: long
|-- hospital referral region description: string
|-- total discharges: long
|-- average covered charges: string
|-- average total payments: string
|-- average medicare payments: string
```

**Exemple de code**

```
# Example: Use resolveChoice to handle
# a column that contains multiple types

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Load the input data and inspect the "provider id" column
medicare = glueContext.create_dynamic_frame.from_catalog(
    database="payments", table_name="medicare_hospital_provider_csv"
)
print("Inspect the provider id column:")
medicare.toDF().select("provider id").show()

# Cast provider id to type long
medicare_resolved_long = medicare.resolveChoice(specs=[("provider id", "cast:long")])
print("Schema after casting provider id to type long:")
medicare_resolved_long.printSchema()
medicare_resolved_long.toDF().select("provider id").show()

# Create separate columns
# for each provider id type
medicare_resolved_cols = medicare.resolveChoice(choice="make_cols")
print("Schema after creating separate columns for each type:")
medicare_resolved_cols.printSchema()
medicare_resolved_cols.toDF().select("provider id_long", "provider id_string").show()
```

#### Output
<a name="resolveChoice-example-output"></a>

```
Inspect the 'provider id' column:
+-----------+
|provider id|
+-----------+
|   [10001,]|
|   [10005,]|
|   [10006,]|
|   [10011,]|
|   [10016,]|
|   [10023,]|
|   [10029,]|
|   [10033,]|
|   [10039,]|
|   [10040,]|
|   [10046,]|
|   [10055,]|
|   [10056,]|
|   [10078,]|
|   [10083,]|
|   [10085,]|
|   [10090,]|
|   [10092,]|
|   [10100,]|
|   [10103,]|
+-----------+
only showing top 20 rows

Schema after casting 'provider id' to type long:
root
|-- drg definition: string
|-- provider id: long
|-- provider name: string
|-- provider street address: string
|-- provider city: string
|-- provider state: string
|-- provider zip code: long
|-- hospital referral region description: string
|-- total discharges: long
|-- average covered charges: string
|-- average total payments: string
|-- average medicare payments: string

+-----------+
|provider id|
+-----------+
|      10001|
|      10005|
|      10006|
|      10011|
|      10016|
|      10023|
|      10029|
|      10033|
|      10039|
|      10040|
|      10046|
|      10055|
|      10056|
|      10078|
|      10083|
|      10085|
|      10090|
|      10092|
|      10100|
|      10103|
+-----------+
only showing top 20 rows

Schema after creating separate columns for each type:
root
|-- drg definition: string
|-- provider id_string: string
|-- provider id_long: long
|-- provider name: string
|-- provider street address: string
|-- provider city: string
|-- provider state: string
|-- provider zip code: long
|-- hospital referral region description: string
|-- total discharges: long
|-- average covered charges: string
|-- average total payments: string
|-- average medicare payments: string

+----------------+------------------+
|provider id_long|provider id_string|
+----------------+------------------+
|           10001|              null|
|           10005|              null|
|           10006|              null|
|           10011|              null|
|           10016|              null|
|           10023|              null|
|           10029|              null|
|           10033|              null|
|           10039|              null|
|           10040|              null|
|           10046|              null|
|           10055|              null|
|           10056|              null|
|           10078|              null|
|           10083|              null|
|           10085|              null|
|           10090|              null|
|           10092|              null|
|           10100|              null|
|           10103|              null|
+----------------+------------------+
only showing top 20 rows
```

## select\$1fields
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-select_fields"></a>

**`select_fields(paths, transformation_ctx="", info="", stageThreshold=0, totalThreshold=0)`**

Renvoie un nouveau `DynamicFrame` contenant les champs sélectionnés.
+ `paths` - Une liste de chaînes. Chaque chaîne est un chemin d'accès au nœud de niveau supérieur que vous souhaitez sélectionner.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne à associer avec le signalement des erreurs pour cette transformation (facultatif).
+ `stageThreshold` – Nombre d'erreurs rencontrées pendant cette transformation et qui doit entraîner l’erreur générée par le processus (facultatif) La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.
+ `totalThreshold` – Nombre d'erreurs rencontrées jusqu'à cette transformation, incluse, et qui doit entraîner l'arrêt du processus (facultatif). La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.

### Exemple : utilisez select\$1fields pour créer un nouveau `DynamicFrame` avec les champs sélectionnés
<a name="pyspark-select_fields-example"></a>

L'exemple de code suivant illustre comment utiliser `select_fields` Méthode de création d'un nouveau `DynamicFrame` avec une liste de champs sélectionnés parmi un `DynamicFrame`.

**Note**  
Pour accéder au jeu de données utilisé dans cet exemple, voir [Exemple de code : Données de jonction et de mise en relation](aws-glue-programming-python-samples-legislators.md) et suivez les instructions de la section[Étape 1 : analyser les données dans le compartiment Amazon S3](aws-glue-programming-python-samples-legislators.md#aws-glue-programming-python-samples-legislators-crawling).

```
# Example: Use select_fields to select specific fields from a DynamicFrame

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Create a DynamicFrame and view its schema
persons = glueContext.create_dynamic_frame.from_catalog(
    database="legislators", table_name="persons_json"
)
print("Schema for the persons DynamicFrame:")
persons.printSchema()

# Create a new DynamicFrame with chosen fields
names = persons.select_fields(paths=["family_name", "given_name"])
print("Schema for the names DynamicFrame, created with select_fields:")
names.printSchema()
names.toDF().show()
```

#### Output
<a name="select_fields-example-output"></a>

```
Schema for the persons DynamicFrame:
root
|-- family_name: string
|-- name: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- gender: string
|-- image: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
|-- sort_name: string
|-- images: array
|    |-- element: struct
|    |    |-- url: string
|-- given_name: string
|-- birth_date: string
|-- id: string
|-- contact_details: array
|    |-- element: struct
|    |    |-- type: string
|    |    |-- value: string
|-- death_date: string

Schema for the names DynamicFrame:
root
|-- family_name: string
|-- given_name: string

+-----------+----------+
|family_name|given_name|
+-----------+----------+
|    Collins|   Michael|
|   Huizenga|      Bill|
|    Clawson|    Curtis|
|    Solomon|    Gerald|
|     Rigell|    Edward|
|      Crapo|   Michael|
|      Hutto|      Earl|
|      Ertel|     Allen|
|     Minish|    Joseph|
|    Andrews|    Robert|
|     Walden|      Greg|
|      Kazen|   Abraham|
|     Turner|   Michael|
|      Kolbe|     James|
|  Lowenthal|      Alan|
|    Capuano|   Michael|
|   Schrader|      Kurt|
|     Nadler|   Jerrold|
|     Graves|       Tom|
|   McMillan|      John|
+-----------+----------+
only showing top 20 rows
```

## simplify\$1ddb\$1json
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-simplify"></a>

**`simplify_ddb_json(): DynamicFrame`**

Simplifie les colonnes imbriquées dans un `DynamicFrame` qui se trouvent spécifiquement dans la structure JSON DynamoDB, et renvoie une nouvelle version simplifiée du `DynamicFrame`. S’il existe plusieurs types ou un type Carte dans un type Liste, les éléments de la liste ne seront pas simplifiés. Notez qu’il s’agit d’un type spécifique de transformation qui se comporte différemment de la transformation `unnest` normale et nécessite que les données soient déjà dans la structure JSON DynamoDB. Pour plus d'informations, consultez [JSON DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataExport.Output.html#DataExport.Output.Data).

Par exemple, le schéma d'une lecture d'exportation avec la structure JSON DynamoDB pourrait ressembler à ce qui suit :

```
root
|-- Item: struct
|    |-- parentMap: struct
|    |    |-- M: struct
|    |    |    |-- childMap: struct
|    |    |    |    |-- M: struct
|    |    |    |    |    |-- appName: struct
|    |    |    |    |    |    |-- S: string
|    |    |    |    |    |-- packageName: struct
|    |    |    |    |    |    |-- S: string
|    |    |    |    |    |-- updatedAt: struct
|    |    |    |    |    |    |-- N: string
|    |-- strings: struct
|    |    |-- SS: array
|    |    |    |-- element: string
|    |-- numbers: struct
|    |    |-- NS: array
|    |    |    |-- element: string
|    |-- binaries: struct
|    |    |-- BS: array
|    |    |    |-- element: string
|    |-- isDDBJson: struct
|    |    |-- BOOL: boolean
|    |-- nullValue: struct
|    |    |-- NULL: boolean
```

La transformation `simplify_ddb_json()` convertirait ceci en :

```
root
|-- parentMap: struct
|    |-- childMap: struct
|    |    |-- appName: string
|    |    |-- packageName: string
|    |    |-- updatedAt: string
|-- strings: array
|    |-- element: string
|-- numbers: array
|    |-- element: string
|-- binaries: array
|    |-- element: string
|-- isDDBJson: boolean
|-- nullValue: null
```

### Exemple : utilisez simplify\$1ddb\$1json pour invoquer une simplification JSON DynamoDB.
<a name="pyspark-simplify-ddb-json-example"></a>

Cet exemple de code utilise la `simplify_ddb_json` méthode permettant d'utiliser le connecteur d'exportation AWS Glue DynamoDB, d'invoquer un code JSON Simplify DynamoDB et d'imprimer le nombre de partitions.

**Exemple de code**

```
from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext()
glueContext = GlueContext(sc)

dynamicFrame = glueContext.create_dynamic_frame.from_options(
    connection_type = "dynamodb",
    connection_options = {
        'dynamodb.export': 'ddb',
        'dynamodb.tableArn': '<table arn>',
        'dynamodb.s3.bucket': '<bucket name>',
        'dynamodb.s3.prefix': '<bucket prefix>',
        'dynamodb.s3.bucketOwner': '<account_id of bucket>'
    }
)
simplified = dynamicFrame.simplify_ddb_json()
print(simplified.getNumPartitions())
```

## spigot
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-spigot"></a>

**`spigot(path, options={})`**

Écrit des exemples d'enregistrement sur une destination spécifiée pour vous aider à vérifier les transformations effectuées par votre tâche.
+ `path` – Chemin d'accès de la destination sur laquelle écrire (obligatoire).
+ `options` – Paires clé-valeur spécifiant des options (facultatif). L'option `"topk"` indique que les premiers enregistrements `k` doivent être écrits. L'option `"prob"` indique la probabilité (sous forme de décimale) de choisir un enregistrement donné. Vous pouvez l'utiliser pour sélectionner les enregistrements à écrire.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).

### Exemple : utiliser la méthode spigot pour écrire des exemples de champs d'une image `DynamicFrame` vers Amazon S3
<a name="pyspark-spigot-example"></a>

Cet exemple de code utilise la méthode `spigot` pour écrire des exemples d'enregistrements dans un compartiment Amazon S3 après avoir appliqué la transformation `select_fields`. 

**Exemple de jeu de données**

**Note**  
Pour accéder au jeu de données utilisé dans cet exemple, voir [Exemple de code : Données de jonction et de mise en relation](aws-glue-programming-python-samples-legislators.md) et suivez les instructions de la section[Étape 1 : analyser les données dans le compartiment Amazon S3](aws-glue-programming-python-samples-legislators.md#aws-glue-programming-python-samples-legislators-crawling).

L'exemple utilise une image `DynamicFrame` appelée `persons` avec le schéma suivant :

```
root
|-- family_name: string
|-- name: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- gender: string
|-- image: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
|-- sort_name: string
|-- images: array
|    |-- element: struct
|    |    |-- url: string
|-- given_name: string
|-- birth_date: string
|-- id: string
|-- contact_details: array
|    |-- element: struct
|    |    |-- type: string
|    |    |-- value: string
|-- death_date: string
```

**Exemple de code**

```
# Example: Use spigot to write sample records
# to a destination during a transformation
# from pyspark.context import SparkContext.
# Replace DOC-EXAMPLE-BUCKET with your own location.

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Load table data into a DynamicFrame
persons = glueContext.create_dynamic_frame.from_catalog(
    database="legislators", table_name="persons_json"
)

# Perform the select_fields on the DynamicFrame
persons = persons.select_fields(paths=["family_name", "given_name", "birth_date"])

# Use spigot to write a sample of the transformed data
# (the first 10 records)
spigot_output = persons.spigot(
    path="s3://DOC-EXAMPLE-BUCKET", options={"topk": 10}
)
# Example: Use spigot to write sample records
# to a destination during a transformation
# from pyspark.context import SparkContext.
# Replace DOC-EXAMPLE-BUCKET with your own location.

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Load table data into a DynamicFrame
persons = glueContext.create_dynamic_frame.from_catalog(
    database="legislators", table_name="persons_json"
)

# Perform the select_fields on the DynamicFrame
persons = persons.select_fields(paths=["family_name", "given_name", "birth_date"])

# Use spigot to write a sample of the transformed data
# (the first 10 records)
spigot_output = persons.spigot(
    path="s3://DOC-EXAMPLE-BUCKET", options={"topk": 10}
)
```

#### Output
<a name="spigot-example-output"></a>

Voici un exemple des données que `spigot` écrit dans Amazon S3. Étant donné que l'exemple de code spécifie `options={"topk": 10}`, les exemples de données contiennent les 10 premiers enregistrements.

```
{"family_name":"Collins","given_name":"Michael","birth_date":"1944-10-15"}
{"family_name":"Huizenga","given_name":"Bill","birth_date":"1969-01-31"}
{"family_name":"Clawson","given_name":"Curtis","birth_date":"1959-09-28"}
{"family_name":"Solomon","given_name":"Gerald","birth_date":"1930-08-14"}
{"family_name":"Rigell","given_name":"Edward","birth_date":"1960-05-28"}
{"family_name":"Crapo","given_name":"Michael","birth_date":"1951-05-20"}
{"family_name":"Hutto","given_name":"Earl","birth_date":"1926-05-12"}
{"family_name":"Ertel","given_name":"Allen","birth_date":"1937-11-07"}
{"family_name":"Minish","given_name":"Joseph","birth_date":"1916-09-01"}
{"family_name":"Andrews","given_name":"Robert","birth_date":"1957-08-04"}
```

## split\$1fields
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-split_fields"></a>

**`split_fields(paths, name1, name2, transformation_ctx="", info="", stageThreshold=0, totalThreshold=0)`**

Renvoie une nouvelle collection `DynamicFrameCollection` qui contient deux images `DynamicFrames`. La première image `DynamicFrame` contient tous les nœuds qui ont été fractionnés, et la seconde contient les nœuds qui restent.
+ `paths` – Liste de chaînes, chacune étant un chemin d'accès complet à un nœud que vous souhaitez fractionner en un nouveau `DynamicFrame`.
+ `name1` – Chaîne de nom pour le `DynamicFrame` fractionné.
+ `name2` – Chaîne de nom pour le `DynamicFrame` qui reste après le fractionnement des nœuds spécifiés.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne à associer avec le signalement des erreurs pour cette transformation (facultatif).
+ `stageThreshold` – Nombre d'erreurs rencontrées pendant cette transformation et qui doit entraîner l’erreur générée par le processus (facultatif) La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.
+ `totalThreshold` – Nombre d'erreurs rencontrées jusqu'à cette transformation, incluse, et qui doit entraîner l'arrêt du processus (facultatif). La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.

### Exemple : utiliser la méthode split\$1fields pour fractionner les champs sélectionnés en une image `DynamicFrame` distincte
<a name="pyspark-split_fields-example"></a>

Cet exemple de code utilise la méthode `split_fields` pour fractionner une liste de champs spécifiés en une image `DynamicFrame` distincte.

**Exemple de jeu de données**

L'exemple utilise une image `DynamicFrame` appelée `l_root_contact_details` qui provient d'une collection nommée `legislators_relationalized`.

`l_root_contact_details` contient le schéma et les entrées suivantes.

```
root
|-- id: long
|-- index: int
|-- contact_details.val.type: string
|-- contact_details.val.value: string

+---+-----+------------------------+-------------------------+
| id|index|contact_details.val.type|contact_details.val.value|
+---+-----+------------------------+-------------------------+
|  1|    0|                   phone|             202-225-5265|
|  1|    1|                 twitter|              kathyhochul|
|  2|    0|                   phone|             202-225-3252|
|  2|    1|                 twitter|            repjackyrosen|
|  3|    0|                     fax|             202-225-1314|
|  3|    1|                   phone|             202-225-3772|
...
```

**Exemple de code**

```
# Example: Use split_fields to split selected
# fields into a separate DynamicFrame

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Load the input DynamicFrame and inspect its schema
frame_to_split = legislators_relationalized.select("l_root_contact_details")
print("Inspect the input DynamicFrame schema:")
frame_to_split.printSchema()

# Split id and index fields into a separate DynamicFrame
split_fields_collection = frame_to_split.split_fields(["id", "index"], "left", "right")

# Inspect the resulting DynamicFrames
print("Inspect the schemas of the DynamicFrames created with split_fields:")
split_fields_collection.select("left").printSchema()
split_fields_collection.select("right").printSchema()
```

#### Output
<a name="split_fields-example-output"></a>

```
Inspect the input DynamicFrame's schema:
root
|-- id: long
|-- index: int
|-- contact_details.val.type: string
|-- contact_details.val.value: string

Inspect the schemas of the DynamicFrames created with split_fields:
root
|-- id: long
|-- index: int

root
|-- contact_details.val.type: string
|-- contact_details.val.value: string
```

## split\$1rows
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-split_rows"></a>

**`split_rows(comparison_dict, name1, name2, transformation_ctx="", info="", stageThreshold=0, totalThreshold=0)`**

Scinde une ou plusieurs lignes d'un objet `DynamicFrame` en un nouveau `DynamicFrame`.

La méthode renvoie une nouvelle collection `DynamicFrameCollection` qui contient deux images `DynamicFrames`. La première image `DynamicFrame` contient toutes les lignes qui ont été fractionnées, et la seconde contient les lignes qui restent.
+ `comparison_dict` – Dictionnaire dans lequel la clé est un chemin d'accès à une colonne et la valeur est un autre dictionnaire permettant de mapper les comparateurs aux valeurs auxquelles les valeurs de la colonne sont comparées. Par exemple, `{"age": {">": 10, "<": 20}}` fractionne toutes les lignes dont la valeur de la colonne d'âge est supérieure à 10 et inférieure à 20.
+ `name1` – Chaîne de nom pour le `DynamicFrame` fractionné.
+ `name2` – Chaîne de nom pour le `DynamicFrame` qui reste après le fractionnement des nœuds spécifiés.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne à associer avec le signalement des erreurs pour cette transformation (facultatif).
+ `stageThreshold` – Nombre d'erreurs rencontrées pendant cette transformation et qui doit entraîner l’erreur générée par le processus (facultatif) La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.
+ `totalThreshold` – Nombre d'erreurs rencontrées jusqu'à cette transformation, incluse, et qui doit entraîner l'arrêt du processus (facultatif). La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.

### Exemple : utiliser la méthode split\$1rows pour fractionner des lignes en une image `DynamicFrame`
<a name="pyspark-split_rows-example"></a>

Cet exemple de code utilise la méthode `split_rows` pour fractionner des lignes en une image `DynamicFrame` en se basant sur la valeur du champ `id`.

**Exemple de jeu de données**

L'exemple utilise une image `DynamicFrame` appelée `l_root_contact_details` qui est sélectionnée à partir d'une collection nommée `legislators_relationalized`.

`l_root_contact_details` contient le schéma et les entrées suivantes.

```
root
|-- id: long
|-- index: int
|-- contact_details.val.type: string
|-- contact_details.val.value: string

+---+-----+------------------------+-------------------------+
| id|index|contact_details.val.type|contact_details.val.value|
+---+-----+------------------------+-------------------------+
|  1|    0|                   phone|             202-225-5265|
|  1|    1|                 twitter|              kathyhochul|
|  2|    0|                   phone|             202-225-3252|
|  2|    1|                 twitter|            repjackyrosen|
|  3|    0|                     fax|             202-225-1314|
|  3|    1|                   phone|             202-225-3772|
|  3|    2|                 twitter|          MikeRossUpdates|
|  4|    0|                     fax|             202-225-1314|
|  4|    1|                   phone|             202-225-3772|
|  4|    2|                 twitter|          MikeRossUpdates|
|  5|    0|                     fax|             202-225-1314|
|  5|    1|                   phone|             202-225-3772|
|  5|    2|                 twitter|          MikeRossUpdates|
|  6|    0|                     fax|             202-225-1314|
|  6|    1|                   phone|             202-225-3772|
|  6|    2|                 twitter|          MikeRossUpdates|
|  7|    0|                     fax|             202-225-1314|
|  7|    1|                   phone|             202-225-3772|
|  7|    2|                 twitter|          MikeRossUpdates|
|  8|    0|                     fax|             202-225-1314|
+---+-----+------------------------+-------------------------+
```

**Exemple de code**

```
# Example: Use split_rows to split up 
# rows in a DynamicFrame based on value

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Retrieve the DynamicFrame to split
frame_to_split = legislators_relationalized.select("l_root_contact_details")

# Split up rows by ID
split_rows_collection = frame_to_split.split_rows({"id": {">": 10}}, "high", "low")

# Inspect the resulting DynamicFrames
print("Inspect the DynamicFrame that contains IDs < 10")
split_rows_collection.select("low").toDF().show()
print("Inspect the DynamicFrame that contains IDs > 10")
split_rows_collection.select("high").toDF().show()
```

#### Output
<a name="split_rows-example-output"></a>

```
Inspect the DynamicFrame that contains IDs < 10
+---+-----+------------------------+-------------------------+
| id|index|contact_details.val.type|contact_details.val.value|
+---+-----+------------------------+-------------------------+
|  1|    0|                   phone|             202-225-5265|
|  1|    1|                 twitter|              kathyhochul|
|  2|    0|                   phone|             202-225-3252|
|  2|    1|                 twitter|            repjackyrosen|
|  3|    0|                     fax|             202-225-1314|
|  3|    1|                   phone|             202-225-3772|
|  3|    2|                 twitter|          MikeRossUpdates|
|  4|    0|                     fax|             202-225-1314|
|  4|    1|                   phone|             202-225-3772|
|  4|    2|                 twitter|          MikeRossUpdates|
|  5|    0|                     fax|             202-225-1314|
|  5|    1|                   phone|             202-225-3772|
|  5|    2|                 twitter|          MikeRossUpdates|
|  6|    0|                     fax|             202-225-1314|
|  6|    1|                   phone|             202-225-3772|
|  6|    2|                 twitter|          MikeRossUpdates|
|  7|    0|                     fax|             202-225-1314|
|  7|    1|                   phone|             202-225-3772|
|  7|    2|                 twitter|          MikeRossUpdates|
|  8|    0|                     fax|             202-225-1314|
+---+-----+------------------------+-------------------------+
only showing top 20 rows

Inspect the DynamicFrame that contains IDs > 10
+---+-----+------------------------+-------------------------+
| id|index|contact_details.val.type|contact_details.val.value|
+---+-----+------------------------+-------------------------+
| 11|    0|                   phone|             202-225-5476|
| 11|    1|                 twitter|            RepDavidYoung|
| 12|    0|                   phone|             202-225-4035|
| 12|    1|                 twitter|           RepStephMurphy|
| 13|    0|                     fax|             202-226-0774|
| 13|    1|                   phone|             202-225-6335|
| 14|    0|                     fax|             202-226-0774|
| 14|    1|                   phone|             202-225-6335|
| 15|    0|                     fax|             202-226-0774|
| 15|    1|                   phone|             202-225-6335|
| 16|    0|                     fax|             202-226-0774|
| 16|    1|                   phone|             202-225-6335|
| 17|    0|                     fax|             202-226-0774|
| 17|    1|                   phone|             202-225-6335|
| 18|    0|                     fax|             202-226-0774|
| 18|    1|                   phone|             202-225-6335|
| 19|    0|                     fax|             202-226-0774|
| 19|    1|                   phone|             202-225-6335|
| 20|    0|                     fax|             202-226-0774|
| 20|    1|                   phone|             202-225-6335|
+---+-----+------------------------+-------------------------+
only showing top 20 rows
```

## unbox
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-unbox"></a>

**`unbox(path, format, transformation_ctx="", info="", stageThreshold=0, totalThreshold=0, **options)`**

Effectue une opération unbox sur un champ de chaîne (ou le reformate) dans une image `DynamicFrame` et renvoie une nouvelle image `DynamicFrame` contenant les enregistrements `DynamicRecords` sur lesquels l'opération unbox a été effectuée.

Un `DynamicRecord` représente un enregistrement logique dans un `DynamicFrame`. Il est comparable à une ligne dans un `DataFrame` Apache Spark, à la différence qu'il est auto-descriptif et peut être utilisé pour les données qui ne sont pas conformes à un schéma fixe.
+ `path` – Chemin d'accès complet au nœud de chaîne pour lequel vous souhaitez effectuer une opération unbox.
+ `format` – spécification de format (facultatif). Utilisée pour une connexion Amazon S3 ou AWS Glue prenant en charge plusieurs formats. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne à associer avec le signalement des erreurs pour cette transformation (facultatif).
+ `stageThreshold` – Nombre d'erreurs rencontrées pendant cette transformation et qui doit entraîner l’erreur générée par le processus (facultatif) La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.
+ `totalThreshold` – Nombre d'erreurs rencontrées jusqu'à cette transformation, incluse, et qui doit entraîner l'arrêt du processus (facultatif). La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.
+ `options` – Un ou plusieurs des éléments suivants :
  + `separator` – Chaîne contenant le caractère de séparation.
  + `escaper` – Chaîne contenant le caractère d'échappement.
  + `skipFirst` – Valeur booléenne indiquant s'il faut ignorer la première instance.
  + `withSchema` : une chaîne contenant une représentation JSON du schéma du nœud. Le format de la représentation JSON d'un schéma est défini par la sortie de `StructType.json()`.
  + `withHeader` – Valeur booléenne indiquant si un en-tête est inclus.

### Exemple : utiliser la méthode unbox pour effectuer une opération unbox sur un champ de chaîne en un champ struct
<a name="pyspark-unbox-example"></a>

Cet exemple de code utilise la méthode `unbox` pour *effectuer une opération unbox* sur un champ de chaîne dans une image `DynamicFrame` (ou la reformater) en un champ de type struct.

**Exemple de jeu de données**

L'exemple utilise une image `DynamicFrame` appelée `mapped_with_string` avec le schéma et les entrées suivantes.

Notez le champ nommé `AddressString`. Il s'agit du champ sur lequel l'exemple effectue une opération unbox en un champ struct.

```
root
|-- Average Total Payments: string
|-- AddressString: string
|-- Average Covered Charges: string
|-- DRG Definition: string
|-- Average Medicare Payments: string
|-- Hospital Referral Region Description: string
|-- Address: struct
|    |-- Zip.Code: string
|    |-- City: string
|    |-- Array: array
|    |    |-- element: string
|    |-- State: string
|    |-- Street: string
|-- Provider Id: string
|-- Total Discharges: string
|-- Provider Name: string

+----------------------+--------------------+-----------------------+--------------------+-------------------------+------------------------------------+--------------------+-----------+----------------+--------------------+
|Average Total Payments|       AddressString|Average Covered Charges|      DRG Definition|Average Medicare Payments|Hospital Referral Region Description|             Address|Provider Id|Total Discharges|       Provider Name|
+----------------------+--------------------+-----------------------+--------------------+-------------------------+------------------------------------+--------------------+-----------+----------------+--------------------+
|              $5777.24|{"Street": "1108 ...|              $32963.07|039 - EXTRACRANIA...|                 $4763.73|                         AL - Dothan|[36301, DOTHAN, [...|      10001|              91|SOUTHEAST ALABAMA...|
|              $5787.57|{"Street": "2505 ...|              $15131.85|039 - EXTRACRANIA...|                 $4976.71|                     AL - Birmingham|[35957, BOAZ, [25...|      10005|              14|MARSHALL MEDICAL ...|
|              $5434.95|{"Street": "205 M...|              $37560.37|039 - EXTRACRANIA...|                 $4453.79|                     AL - Birmingham|[35631, FLORENCE,...|      10006|              24|ELIZA COFFEE MEMO...|
|              $5417.56|{"Street": "50 ME...|              $13998.28|039 - EXTRACRANIA...|                 $4129.16|                     AL - Birmingham|[35235, BIRMINGHA...|      10011|              25|   ST VINCENT'S EAST|
...
```

**Exemple de code**

```
# Example: Use unbox to unbox a string field
# into a struct in a DynamicFrame

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

unboxed = mapped_with_string.unbox("AddressString", "json")
unboxed.printSchema()
unboxed.toDF().show()
```

#### Output
<a name="unbox-example-output"></a>

```
root
|-- Average Total Payments: string
|-- AddressString: struct
|    |-- Street: string
|    |-- City: string
|    |-- State: string
|    |-- Zip.Code: string
|    |-- Array: array
|    |    |-- element: string
|-- Average Covered Charges: string
|-- DRG Definition: string
|-- Average Medicare Payments: string
|-- Hospital Referral Region Description: string
|-- Address: struct
|    |-- Zip.Code: string
|    |-- City: string
|    |-- Array: array
|    |    |-- element: string
|    |-- State: string
|    |-- Street: string
|-- Provider Id: string
|-- Total Discharges: string
|-- Provider Name: string

+----------------------+--------------------+-----------------------+--------------------+-------------------------+------------------------------------+--------------------+-----------+----------------+--------------------+
|Average Total Payments|       AddressString|Average Covered Charges|      DRG Definition|Average Medicare Payments|Hospital Referral Region Description|             Address|Provider Id|Total Discharges|       Provider Name|
+----------------------+--------------------+-----------------------+--------------------+-------------------------+------------------------------------+--------------------+-----------+----------------+--------------------+
|              $5777.24|[1108 ROSS CLARK ...|              $32963.07|039 - EXTRACRANIA...|                 $4763.73|                         AL - Dothan|[36301, DOTHAN, [...|      10001|              91|SOUTHEAST ALABAMA...|
|              $5787.57|[2505 U S HIGHWAY...|              $15131.85|039 - EXTRACRANIA...|                 $4976.71|                     AL - Birmingham|[35957, BOAZ, [25...|      10005|              14|MARSHALL MEDICAL ...|
|              $5434.95|[205 MARENGO STRE...|              $37560.37|039 - EXTRACRANIA...|                 $4453.79|                     AL - Birmingham|[35631, FLORENCE,...|      10006|              24|ELIZA COFFEE MEMO...|
|              $5417.56|[50 MEDICAL PARK ...|              $13998.28|039 - EXTRACRANIA...|                 $4129.16|                     AL - Birmingham|[35235, BIRMINGHA...|      10011|              25|   ST VINCENT'S EAST|
|              $5658.33|[1000 FIRST STREE...|              $31633.27|039 - EXTRACRANIA...|                 $4851.44|                     AL - Birmingham|[35007, ALABASTER...|      10016|              18|SHELBY BAPTIST ME...|
|              $6653.80|[2105 EAST SOUTH ...|              $16920.79|039 - EXTRACRANIA...|                 $5374.14|                     AL - Montgomery|[36116, MONTGOMER...|      10023|              67|BAPTIST MEDICAL C...|
|              $5834.74|[2000 PEPPERELL P...|              $11977.13|039 - EXTRACRANIA...|                 $4761.41|                     AL - Birmingham|[36801, OPELIKA, ...|      10029|              51|EAST ALABAMA MEDI...|
|              $8031.12|[619 SOUTH 19TH S...|              $35841.09|039 - EXTRACRANIA...|                 $5858.50|                     AL - Birmingham|[35233, BIRMINGHA...|      10033|              32|UNIVERSITY OF ALA...|
|              $6113.38|[101 SIVLEY RD, H...|              $28523.39|039 - EXTRACRANIA...|                 $5228.40|                     AL - Huntsville|[35801, HUNTSVILL...|      10039|             135| HUNTSVILLE HOSPITAL|
|              $5541.05|[1007 GOODYEAR AV...|              $75233.38|039 - EXTRACRANIA...|                 $4386.94|                     AL - Birmingham|[35903, GADSDEN, ...|      10040|              34|GADSDEN REGIONAL ...|
|              $5461.57|[600 SOUTH THIRD ...|              $67327.92|039 - EXTRACRANIA...|                 $4493.57|                     AL - Birmingham|[35901, GADSDEN, ...|      10046|              14|RIVERVIEW REGIONA...|
|              $5356.28|[4370 WEST MAIN S...|              $39607.28|039 - EXTRACRANIA...|                 $4408.20|                         AL - Dothan|[36305, DOTHAN, [...|      10055|              45|    FLOWERS HOSPITAL|
|              $5374.65|[810 ST VINCENT'S...|              $22862.23|039 - EXTRACRANIA...|                 $4186.02|                     AL - Birmingham|[35205, BIRMINGHA...|      10056|              43|ST VINCENT'S BIRM...|
|              $5366.23|[400 EAST 10TH ST...|              $31110.85|039 - EXTRACRANIA...|                 $4376.23|                     AL - Birmingham|[36207, ANNISTON,...|      10078|              21|NORTHEAST ALABAMA...|
|              $5282.93|[1613 NORTH MCKEN...|              $25411.33|039 - EXTRACRANIA...|                 $4383.73|                         AL - Mobile|[36535, FOLEY, [1...|      10083|              15|SOUTH BALDWIN REG...|
|              $5676.55|[1201 7TH STREET ...|               $9234.51|039 - EXTRACRANIA...|                 $4509.11|                     AL - Huntsville|[35609, DECATUR, ...|      10085|              27|DECATUR GENERAL H...|
|              $5930.11|[6801 AIRPORT BOU...|              $15895.85|039 - EXTRACRANIA...|                 $3972.85|                         AL - Mobile|[36608, MOBILE, [...|      10090|              27| PROVIDENCE HOSPITAL|
|              $6192.54|[809 UNIVERSITY B...|              $19721.16|039 - EXTRACRANIA...|                 $5179.38|                     AL - Tuscaloosa|[35401, TUSCALOOS...|      10092|              31|D C H REGIONAL ME...|
|              $4968.00|[750 MORPHY AVENU...|              $10710.88|039 - EXTRACRANIA...|                 $3898.88|                         AL - Mobile|[36532, FAIRHOPE,...|      10100|              18|     THOMAS HOSPITAL|
|              $5996.00|[701 PRINCETON AV...|              $51343.75|039 - EXTRACRANIA...|                 $4962.45|                     AL - Birmingham|[35211, BIRMINGHA...|      10103|              33|BAPTIST MEDICAL C...|
+----------------------+--------------------+-----------------------+--------------------+-------------------------+------------------------------------+--------------------+-----------+----------------+--------------------+
only showing top 20 rows
```

## union
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-union"></a>

**`union(frame1, frame2, transformation_ctx = "", info = "", stageThreshold = 0, totalThreshold = 0)`**

Union 2 DynamicFrames. Renvoie DynamicFrame tous les enregistrements des deux entrées DynamicFrames. Cette transformation peut renvoyer des résultats différents à partir de l'union de deux DataFrames avec des données équivalentes. Si vous avez besoin du comportement DataFrame syndical de Spark, pensez à utiliser`toDF`.
+ `frame1`— D'abord DynamicFrame à se syndiquer. 
+ `frame2`— Après DynamicFrame l'union. 
+ `transformation_ctx` : (facultatif) chaîne unique utilisée pour identifier les informations sur l'état/les statistiques. 
+ `info` : (facultatif) chaîne à associer à des erreurs dans la transformation. 
+ `stageThreshold` : (facultatif) nombre maximum d'erreurs dans la transformation jusqu'à ce que le traitement entraîne une erreur 
+ `totalThreshold` : (facultatif) nombre maximum d'erreurs au total jusqu'à ce que le traitement entraîne une erreur. 

## unnest
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-unnest"></a>

**`unnest(transformation_ctx="", info="", stageThreshold=0, totalThreshold=0)`**

Désimbrique les objets imbriqués dans une image `DynamicFrame`. Ils deviennent des objets de niveau supérieur et l'opération renvoie une nouvelle image `DynamicFrame` non imbriquée.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne à associer avec le signalement des erreurs pour cette transformation (facultatif).
+ `stageThreshold` – Nombre d'erreurs rencontrées pendant cette transformation et qui doit entraîner l’erreur générée par le processus (facultatif) La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.
+ `totalThreshold` – Nombre d'erreurs rencontrées jusqu'à cette transformation, incluse, et qui doit entraîner l'arrêt du processus (facultatif). La valeur par défaut est zéro, ce qui indique que le processus ne doit pas générer d'erreur.

### Exemple : utiliser la méthode unnest pour transformer des champs imbriqués en champs de niveau supérieur
<a name="pyspark-unnest-example"></a>

Cet exemple de code utilise la méthode `unnest` pour aplatir tous les champs imbriqués dans une image `DynamicFrame` en champs de niveau supérieur.

**Exemple de jeu de données**

L'exemple utilise une image `DynamicFrame` appelée `mapped_medicare` avec le schéma suivant. Notez que le champ `Address` est le seul qui contient des données imbriquées.

```
root
|-- Average Total Payments: string
|-- Average Covered Charges: string
|-- DRG Definition: string
|-- Average Medicare Payments: string
|-- Hospital Referral Region Description: string
|-- Address: struct
|    |-- Zip.Code: string
|    |-- City: string
|    |-- Array: array
|    |    |-- element: string
|    |-- State: string
|    |-- Street: string
|-- Provider Id: string
|-- Total Discharges: string
|-- Provider Name: string
```

**Exemple de code**

```
# Example: Use unnest to unnest nested
# objects in a DynamicFrame

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Unnest all nested fields
unnested = mapped_medicare.unnest()
unnested.printSchema()
```

#### Output
<a name="unnest-example-output"></a>

```
root
|-- Average Total Payments: string
|-- Average Covered Charges: string
|-- DRG Definition: string
|-- Average Medicare Payments: string
|-- Hospital Referral Region Description: string
|-- Address.Zip.Code: string
|-- Address.City: string
|-- Address.Array: array
|    |-- element: string
|-- Address.State: string
|-- Address.Street: string
|-- Provider Id: string
|-- Total Discharges: string
|-- Provider Name: string
```

## unnest\$1ddb\$1json
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-unnest_ddb_json"></a>

Supprime l'imbrication des colonnes imbriquées dans un `DynamicFrame` qui se trouvent spécifiquement dans la structure JSON DynamoDB, et renvoie une nouvelle version non imbriquée `DynamicFrame`. Les colonnes d'un tableau de types de structure ne seront pas non-imbriquées. Notez qu'il s'agit d'un type spécifique de transformation non imbriquée qui se comporte différemment de la transformation `unnest` normale et nécessite que les données soient déjà dans la structure JSON DynamoDB. Pour plus d'informations, consultez [JSON DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataExport.Output.html#DataExport.Output.Data).

**`unnest_ddb_json(transformation_ctx="", info="", stageThreshold=0, totalThreshold=0)`**
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne à associer avec le signalement des erreurs pour cette transformation (facultatif).
+ `stageThreshold` – Nombre d'erreurs rencontrées pendant cette transformation et qui doit entraîner l'arrêt du processus (facultatif : zéro par défaut, qui indique que le processus ne doit pas être arrêté dans ce cas).
+ `totalThreshold` – Nombre d'erreurs rencontrées jusqu'à cette transformation, incluse, et qui doit entraîner l'arrêt du processus (facultatif : zéro par défaut, qui indique que le processus ne doit pas être arrêté dans ce cas).

Par exemple, le schéma d'une lecture d'exportation avec la structure JSON DynamoDB pourrait ressembler à ce qui suit :

```
root
|-- Item: struct
|    |-- ColA: struct
|    |    |-- S: string
|    |-- ColB: struct
|    |    |-- S: string
|    |-- ColC: struct
|    |    |-- N: string
|    |-- ColD: struct
|    |    |-- L: array
|    |    |    |-- element: null
```

La transformation `unnest_ddb_json()` convertirait ceci en :

```
root
|-- ColA: string
|-- ColB: string
|-- ColC: string
|-- ColD: array    
|    |-- element: null
```

L'exemple de code suivant montre comment utiliser le connecteur d'exportation AWS Glue DynamoDB, appeler un DynamoDB JSON unnest et imprimer le nombre de partitions :

```
import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv, ["JOB_NAME"])
glue_context= GlueContext(SparkContext.getOrCreate())
job = Job(glue_context)
job.init(args["JOB_NAME"], args)

dynamicFrame = glue_context.create_dynamic_frame.from_options(
    connection_type="dynamodb",
    connection_options={
        "dynamodb.export": "ddb",
        "dynamodb.tableArn": "<test_source>",
        "dynamodb.s3.bucket": "<bucket name>",
        "dynamodb.s3.prefix": "<bucket prefix>",
        "dynamodb.s3.bucketOwner": "<account_id>",
    }
)
unnested = dynamicFrame.unnest_ddb_json()
print(unnested.getNumPartitions())

job.commit()
```

## write
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-write"></a>

**`write(connection_type, connection_options, format, format_options, accumulator_size)`**

Permet d'obtenir un [DataSink(objet)](aws-glue-api-crawler-pyspark-extensions-types.md#aws-glue-api-crawler-pyspark-extensions-types-awsglue-data-sink) du type de connexion spécifié à partir du [GlueContext classe](aws-glue-api-crawler-pyspark-extensions-glue-context.md) de ce type `DynamicFrame`, et l'utilise pour formater et écrire le contenu de ce `DynamicFrame`. Renvoie le nouveau `DynamicFrame` formaté et écrit comme spécifié.
+ `connection_type` – type de connexion à utiliser. Les valeurs valides sont `s3`, `mysql`, `postgresql`, `redshift`, `sqlserver` et `oracle`.
+ `connection_options` – option de connexion à utiliser (facultatif). Pour un `connection_type` de `s3`, un chemin Amazon S3 est défini.

  ```
  connection_options = {"path": "s3://aws-glue-target/temp"}
  ```

  Pour les connexions JDBC, plusieurs propriétés doivent être définies. Notez que le nom de base de données doit être inclus dans l’URL. Il peut éventuellement être inclus dans les options de connexion.
**Avertissement**  
Il n’est pas recommandé de stocker des mots de passe dans votre script. Envisagez de les utiliser `boto3` pour les extraire AWS Secrets Manager du catalogue de données AWS Glue.

  ```
  connection_options = {"url": "jdbc-url/database", "user": "username", "password": passwordVariable,"dbtable": "table-name", "redshiftTmpDir": "s3-tempdir-path"} 
  ```
+ `format` – spécification de format (facultatif). Utilisée pour une connexion Amazon Simple Storage Service (Amazon S3) ou une connexion AWS Glue qui prend en charge plusieurs formats. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `format_options` – options de format pour le format spécifié. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `accumulator_size` : la taille accumulable à utiliser, en octets (facultatif).

##  – erreurs –
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-_errors"></a>
+ [assertErrorThreshold](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-assertErrorThreshold)
+ [errorsAsDynamiccadre](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-errorsAsDynamicFrame)
+ [errorsCount](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-errorsCount)
+ [stageErrorsCount](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-stageErrorsCount)

## assertErrorThreshold
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-assertErrorThreshold"></a>

`assertErrorThreshold( )` – Assertion pour les erreurs dans les transformations ayant créé ce `DynamicFrame`. Renvoie un `Exception` du `DataFrame` sous-jacent.

## errorsAsDynamiccadre
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-errorsAsDynamicFrame"></a>

`errorsAsDynamicFrame( )` – Renvoie un `DynamicFrame` dans lequel des enregistrements d'erreur sont imbriqués.

### Exemple : utilisez errorsAsDynamic Frame pour afficher les enregistrements d'erreurs
<a name="pyspark-errorsAsDynamicFrame-example"></a>

L'exemple de code suivant illustre comment utiliser `errorsAsDynamicFrame` méthode pour afficher un enregistrement d'erreur pour un `DynamicFrame`.

**Exemple de jeu de données**

L'exemple utilise l'ensemble de données suivant que vous pouvez charger sur Amazon S3 au format JSON. Notez que le deuxième enregistrement est mal formé. Les données mal formées interrompent généralement l'analyse des fichiers lorsque vous utilisez SparkSQL. Cependant, `DynamicFrame` reconnaît les problèmes de malformation et transforme les lignes mal formées en enregistrements d'erreurs que vous pouvez gérer individuellement.

```
{"id": 1, "name": "george", "surname": "washington", "height": 178}
{"id": 2, "name": "benjamin", "surname": "franklin", 
{"id": 3, "name": "alexander", "surname": "hamilton", "height": 171}
{"id": 4, "name": "john", "surname": "jay", "height": 190}
```

**Exemple de code**

```
# Example: Use errorsAsDynamicFrame to view error records.
# Replace s3://DOC-EXAMPLE-S3-BUCKET/error_data.json with your location.

from pyspark.context import SparkContext
from awsglue.context import GlueContext

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Create errors DynamicFrame, view schema
errors = glueContext.create_dynamic_frame.from_options(
    "s3", {"paths": ["s3://DOC-EXAMPLE-S3-BUCKET/error_data.json"]}, "json"
)
print("Schema of errors DynamicFrame:")
errors.printSchema()

# Show that errors only contains valid entries from the dataset
print("errors contains only valid records from the input dataset (2 of 4 records)")
errors.toDF().show()

# View errors
print("Errors count:", str(errors.errorsCount()))
print("Errors:")
errors.errorsAsDynamicFrame().toDF().show()

# View error fields and error data
error_record = errors.errorsAsDynamicFrame().toDF().head()

error_fields = error_record["error"]
print("Error fields: ")
print(error_fields.asDict().keys())

print("\nError record data:")
for key in error_fields.asDict().keys():
    print("\n", key, ": ", str(error_fields[key]))
```

#### Output
<a name="errorsAsDynamicFrame-example-output"></a>

```
Schema of errors DynamicFrame:
root
|-- id: int
|-- name: string
|-- surname: string
|-- height: int

errors contains only valid records from the input dataset (2 of 4 records)
+---+------+----------+------+
| id|  name|   surname|height|
+---+------+----------+------+
|  1|george|washington|   178|
|  4|  john|       jay|   190|
+---+------+----------+------+

Errors count: 1
Errors:
+--------------------+
|               error|
+--------------------+
|[[  File "/tmp/20...|
+--------------------+

Error fields: 
dict_keys(['callsite', 'msg', 'stackTrace', 'input', 'bytesread', 'source', 'dynamicRecord'])

Error record data:

 callsite :  Row(site='  File "/tmp/2060612586885849088", line 549, in <module>\n    sys.exit(main())\n  File "/tmp/2060612586885849088", line 523, in main\n    response = handler(content)\n  File "/tmp/2060612586885849088", line 197, in execute_request\n    result = node.execute()\n  File "/tmp/2060612586885849088", line 103, in execute\n    exec(code, global_dict)\n  File "<stdin>", line 10, in <module>\n  File "/opt/amazon/lib/python3.6/site-packages/awsglue/dynamicframe.py", line 625, in from_options\n    format_options, transformation_ctx, push_down_predicate, **kwargs)\n  File "/opt/amazon/lib/python3.6/site-packages/awsglue/context.py", line 233, in create_dynamic_frame_from_options\n    source.setFormat(format, **format_options)\n', info='')

 msg :  error in jackson reader

 stackTrace :  com.fasterxml.jackson.core.JsonParseException: Unexpected character ('{' (code 123)): was expecting either valid name character (for unquoted name) or double-quote (for quoted) to start field name
 at [Source: com.amazonaws.services.glue.readers.BufferedStream@73492578; line: 3, column: 2]
	at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1581)
	at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:533)
	at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:462)
	at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleOddName(UTF8StreamJsonParser.java:2012)
	at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._parseName(UTF8StreamJsonParser.java:1650)
	at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:740)
	at com.amazonaws.services.glue.readers.JacksonReader$$anonfun$hasNextGoodToken$1.apply(JacksonReader.scala:57)
	at com.amazonaws.services.glue.readers.JacksonReader$$anonfun$hasNextGoodToken$1.apply(JacksonReader.scala:57)
	at scala.collection.Iterator$$anon$9.next(Iterator.scala:162)
	at scala.collection.Iterator$$anon$16.hasNext(Iterator.scala:599)
	at scala.collection.Iterator$$anon$16.hasNext(Iterator.scala:598)
	at scala.collection.Iterator$class.foreach(Iterator.scala:891)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1334)
	at com.amazonaws.services.glue.readers.JacksonReader$$anonfun$1.apply(JacksonReader.scala:120)
	at com.amazonaws.services.glue.readers.JacksonReader$$anonfun$1.apply(JacksonReader.scala:116)
	at com.amazonaws.services.glue.DynamicRecordBuilder.handleErr(DynamicRecordBuilder.scala:209)
	at com.amazonaws.services.glue.DynamicRecordBuilder.handleErrorWithException(DynamicRecordBuilder.scala:202)
	at com.amazonaws.services.glue.readers.JacksonReader.nextFailSafe(JacksonReader.scala:116)
	at com.amazonaws.services.glue.readers.JacksonReader.next(JacksonReader.scala:109)
	at com.amazonaws.services.glue.readers.JSONReader.next(JSONReader.scala:247)
	at com.amazonaws.services.glue.hadoop.TapeHadoopRecordReaderSplittable.nextKeyValue(TapeHadoopRecordReaderSplittable.scala:103)
	at org.apache.spark.rdd.NewHadoopRDD$$anon$1.hasNext(NewHadoopRDD.scala:230)
	at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37)
	at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:409)
	at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:409)
	at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:462)
	at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:409)
	at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:409)
	at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:462)
	at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:409)
	at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:409)
	at org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:255)
	at org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:247)
	at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$24.apply(RDD.scala:836)
	at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$24.apply(RDD.scala:836)
	at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:52)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
	at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:52)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
	at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:90)
	at org.apache.spark.scheduler.Task.run(Task.scala:121)
	at org.apache.spark.executor.Executor$TaskRunner$$anonfun$10.apply(Executor.scala:408)
	at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1360)
	at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:414)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:750)


 input :  

 bytesread :  252

 source :  

 dynamicRecord :  Row(id=2, name='benjamin', surname='franklin')
```

## DynamicFrame Exemples complets
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-comprehensive-examples"></a>

Les exemples suivants montrent différentes manières de créer et d'utiliser des scénarios DynamicFrames autres que les scénarios de catalogue Glue de base.

### Chargement depuis PostgreSQL avec une requête SQL SELECT
<a name="dynamicframe-postgresql-example"></a>

Cet exemple montre comment charger des données depuis une base de données PostgreSQL à l'aide d'une requête SQL SELECT personnalisée :

```
from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)

# Load specific data from PostgreSQL with custom query
postgres_dyf = glueContext.create_dynamic_frame.from_options(
    connection_type="postgresql",
    connection_options={
        "url": "jdbc:postgresql://your-postgres-host:5432/your-database",
        "user": "your-username",
        "password": "your-password",
        "dbtable": "(SELECT customer_id, customer_name, email FROM customers WHERE active = true) AS filtered_customers"
    }
)
```

### Chargement de colonnes spécifiques pour éviter l'analyse complète du tableau
<a name="dynamicframe-column-selection-example"></a>

Cet exemple montre comment charger uniquement des colonnes spécifiques à partir d'une grande table de base de données :

```
from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)

# Load only specific columns from a large table
selected_columns_dyf = glueContext.create_dynamic_frame.from_options(
    connection_type="mysql",
    connection_options={
        "url": "jdbc:mysql://your-mysql-host:3306/your-database",
        "user": "your-username", 
        "password": "your-password",
        "dbtable": "(SELECT order_id, customer_id FROM large_orders_table) AS selected_data"
    }
)

# Alternative approach using column selection in query
efficient_load_dyf = glueContext.create_dynamic_frame.from_options(
    connection_type="postgresql",
    connection_options={
        "url": "jdbc:postgresql://your-postgres-host:5432/your-database",
        "user": "your-username",
        "password": "your-password", 
        "query": "SELECT product_id, product_name FROM products WHERE category = 'electronics'"
    }
)
```

### Filtrage au niveau des lignes via des connexions JDBC
<a name="dynamicframe-row-filtering-example"></a>

Cet exemple montre comment utiliser le filtrage au niveau des lignes pour charger uniquement des lignes spécifiques d'une table de base de données :

```
from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)

# Load filtered rows using WHERE clause
filtered_rows_dyf = glueContext.create_dynamic_frame.from_options(
    connection_type="postgresql",
    connection_options={
        "url": "jdbc:postgresql://your-postgres-host:5432/your-database",
        "user": "your-username",
        "password": "your-password",
        "dbtable": "(SELECT * FROM transactions WHERE transaction_date >= '2024-01-01' AND amount > 100) AS recent_large_transactions"
    }
)

# Using partitionColumn for parallel loading with filtering
partitioned_load_dyf = glueContext.create_dynamic_frame.from_options(
    connection_type="mysql",
    connection_options={
        "url": "jdbc:mysql://your-mysql-host:3306/your-database",
        "user": "your-username",
        "password": "your-password",
        "dbtable": "sales_data",
        "partitionColumn": "sale_date",
        "lowerBound": "2024-01-01",
        "upperBound": "2024-12-31",
        "numPartitions": "10"
    }
)
```

### Création DynamicFrame à partir de données Python en mémoire
<a name="dynamicframe-in-memory-example"></a>

Cet exemple montre comment créer un fichier à DynamicFrame partir de listes, de tuples ou de dictionnaires Python :

```
from awsglue.context import GlueContext
from awsglue.dynamicframe import DynamicFrame
from pyspark.context import SparkContext
from pyspark.sql import Row

sc = SparkContext()
glueContext = GlueContext(sc)

# Method 1: From list of tuples
data_tuples = [
    ("John", "Doe", 30, "Engineer"),
    ("Jane", "Smith", 25, "Designer"), 
    ("Bob", "Johnson", 35, "Manager")
]

# Convert to RDD of Rows
rdd = sc.parallelize([Row(first_name=row[0], last_name=row[1], age=row[2], job=row[3]) for row in data_tuples])
df = glueContext.spark_session.createDataFrame(rdd)
dyf_from_tuples = DynamicFrame.fromDF(df, glueContext, "employees_from_tuples")

# Method 2: From list of dictionaries
data_dicts = [
    {"product_id": 1, "product_name": "Laptop", "price": 999.99, "category": "Electronics"},
    {"product_id": 2, "product_name": "Book", "price": 19.99, "category": "Education"},
    {"product_id": 3, "product_name": "Chair", "price": 149.99, "category": "Furniture"}
]

df_from_dicts = glueContext.spark_session.createDataFrame(data_dicts)
dyf_from_dicts = DynamicFrame.fromDF(df_from_dicts, glueContext, "products_from_dicts")

# Method 3: From nested data structures
nested_data = [
    {
        "customer_id": 1,
        "customer_info": {
            "name": "Alice Brown",
            "email": "alice@example.com"
        },
        "orders": [
            {"order_id": 101, "amount": 250.00},
            {"order_id": 102, "amount": 175.50}
        ]
    }
]

df_nested = glueContext.spark_session.createDataFrame(nested_data)
dyf_nested = DynamicFrame.fromDF(df_nested, glueContext, "customers_with_orders")
```

### Optimisation des performances pour les grands ensembles de données
<a name="dynamicframe-performance-tips"></a>

Lorsque vous travaillez avec de grands ensembles de données, considérez les techniques d'optimisation des performances suivantes :

```
# Use partitioning for parallel reads
large_table_dyf = glueContext.create_dynamic_frame.from_options(
    connection_type="postgresql",
    connection_options={
        "url": "jdbc:postgresql://your-postgres-host:5432/your-database",
        "user": "your-username",
        "password": "your-password",
        "dbtable": "large_table",
        "partitionColumn": "id",
        "lowerBound": "1",
        "upperBound": "1000000", 
        "numPartitions": "20"
    }
)

# Use pushdown predicates to filter at source
filtered_dyf = glueContext.create_dynamic_frame.from_options(
    connection_type="mysql",
    connection_options={
        "url": "jdbc:mysql://your-mysql-host:3306/your-database",
        "user": "your-username",
        "password": "your-password",
        "dbtable": "transactions"
    },
    push_down_predicate="transaction_date >= '2024-01-01'"
)
```

## errorsCount
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-errorsCount"></a>

`errorsCount( )` – Renvoie le nombre total d'erreurs dans un `DynamicFrame`.

## stageErrorsCount
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-stageErrorsCount"></a>

`stageErrorsCount` – Renvoie le nombre d'erreurs survenues lors du processus de génération de ce `DynamicFrame`.

# DynamicFrameCollection classe
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-collection"></a>

Un `DynamicFrameCollection` est un dictionnaire d'objets [DynamicFrame classe](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md) dans lequel les clés sont les noms des `DynamicFrames` et les valeurs, les objets `DynamicFrame`.

## \$1\$1init\$1\$1
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-collection-__init__"></a>

**`__init__(dynamic_frames, glue_ctx)`**
+ `dynamic_frames` – Dictionnaire d'objets [DynamicFrame classe](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md).
+ `glue_ctx` – Un objet [GlueContext classe](aws-glue-api-crawler-pyspark-extensions-glue-context.md).

## Clés
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-collection-keys"></a>

`keys( )` – Renvoie une liste des clés de cette collection, qui comprend généralement les noms des valeurs `DynamicFrame` correspondantes.

## Valeurs
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-collection-values"></a>

`values(key)` – Renvoie une liste des valeurs `DynamicFrame` de cette collection.

## Select
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-collection-select"></a>

**`select(key)`**

Renvoie le `DynamicFrame` correspondant à la clé spécifiée (il s'agit généralement du nom du `DynamicFrame`).
+ `key` - Clé du `DynamicFrameCollection`, qui représente généralement le nom d'un `DynamicFrame`.

## Map
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-collection-map"></a>

**`map(callable, transformation_ctx="")`**

Utilise une fonction transmise pour créer et renvoyer un nouveau `DynamicFrameCollection` basé sur le `DynamicFrames` de cette collection.
+ `callable` - Fonction qui utilise un `DynamicFrame` et le contexte de transformation en tant que paramètres et renvoie un `DynamicFrame`.
+ `transformation_ctx` - Contexte de transformation utilisé par l'élément appelable (facultatif).

## FlatMap
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-collection-flatmap"></a>

**`flatmap(f, transformation_ctx="")`**

Utilise une fonction transmise pour créer et renvoyer un nouveau `DynamicFrameCollection` basé sur le `DynamicFrames` de cette collection.
+ `f` - Fonction qui utilise un `DynamicFrame` en tant que paramètre et renvoie un `DynamicFrame` ou un `DynamicFrameCollection`.
+ `transformation_ctx` - Contexte de transformation utilisé par la fonction(facultatif).

# DynamicFrameWriter classe
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-writer"></a>



##   Méthodes
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-writer-_methods"></a>
+ [\$1\$1init\$1\$1](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-writer-__init__)
+ [from\$1options](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-writer-from_options)
+ [from\$1catalog](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-writer-from_catalog)
+ [from\$1jdbc\$1conf](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-writer-from_jdbc_conf)

## \$1\$1init\$1\$1
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-writer-__init__"></a>

**`__init__(glue_context)`**
+ `glue_context` – [GlueContext classe](aws-glue-api-crawler-pyspark-extensions-glue-context.md) à utiliser.

## from\$1options
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-writer-from_options"></a>

**`from_options(frame, connection_type, connection_options={}, format=None, format_options={}, transformation_ctx="")`**

Écrit un `DynamicFrame` à l'aide de la connexion et du format spécifiés.
+ `frame` – Objet `DynamicFrame` à écrire.
+ `connection_type` – type de connexion. Les valeurs valides sont `s3`, `mysql`, `postgresql`, `redshift`, `sqlserver` et `oracle`.
+ `connection_options` – Options de connexion, telles que le chemin et la table de base de données (facultatif). Pour un `connection_type` de `s3`, un chemin Amazon S3 est défini.

  ```
  connection_options = {"path": "s3://aws-glue-target/temp"}
  ```

  Pour les connexions JDBC, plusieurs propriétés doivent être définies. Notez que le nom de base de données doit être inclus dans l’URL. Il peut éventuellement être inclus dans les options de connexion.
**Avertissement**  
Il n’est pas recommandé de stocker des mots de passe dans votre script. Envisagez de les utiliser `boto3` pour les récupérer depuis AWS Secrets Manager le catalogue de données AWS Glue.

  ```
  connection_options = {"url": "jdbc-url/database", "user": "username", "password": passwordVariable,"dbtable": "table-name", "redshiftTmpDir": "s3-tempdir-path"} 
  ```

  La propriété `dbtable` est le nom de la table JDBC. Pour les magasins de données JDBC qui prennent en charge les schémas dans une base de données, spécifiez `schema.table-name`. Si aucun schéma n'est fourni, c'est le schéma « public » par défaut qui est utilisé.

  Pour plus d'informations, consultez [Types et options de connexion pour ETL dans AWS Glue pour Spark](aws-glue-programming-etl-connect.md).
+ `format` – spécification de format (facultatif). Utilisée pour une connexion Amazon Simple Storage Service (Amazon S3) ou une connexion AWS Glue qui prend en charge plusieurs formats. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `format_options` – options de format pour le format spécifié. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).

## from\$1catalog
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-writer-from_catalog"></a>

**`from_catalog(frame, name_space, table_name, redshift_tmp_dir="", transformation_ctx="")`**

Écrit un `DynamicFrame` à l'aide de la base de données et du nom de table du catalogue spécifié.
+ `frame` – Objet `DynamicFrame` à écrire.
+ `name_space` – Base de données à utiliser.
+ `table_name` – `table_name` à utiliser.
+ `redshift_tmp_dir` – répertoire Amazon Redshift temporaire à utiliser (facultatif).
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).
+ `additional_options` — Options supplémentaires fournies à AWS Glue. 

  Pour écrire sur des tables régies Lake Formation, vous pouvez utiliser ces options supplémentaires :
  + `transactionId`— (Chaîne) ID de transaction auquel effectuer l'écriture dans la table régie. Cette transaction ne peut pas être déjà validée ou interrompue, sinon l'écriture échouera.
  + `callDeleteObjectsOnCancel ` – (booléen, facultatif) Si la valeur est définie sur `true` (par défaut), AWS Glue appelle automatiquement l'API `DeleteObjectsOnCancel` une fois l'objet écrit sur Amazon S3. Pour plus d’informations, consultez [DeleteObjectsOnCancel](https://docs.aws.amazon.com/lake-formation/latest/dg/aws-lake-formation-api-transactions-api.html#aws-lake-formation-api-transactions-api-DeleteObjectsOnCancel) dans le *Guide du développeur AWS Lake Formation *.  
**Example Exemple : écriture dans une table régie dans Lake Formation**  

  ```
  txId = glueContext.start_transaction(read_only=False)
  glueContext.write_dynamic_frame.from_catalog(
      frame=dyf,
      database = db, 
      table_name = tbl, 
      transformation_ctx = "datasource0", 
      additional_options={"transactionId":txId})
  ...
  glueContext.commit_transaction(txId)
  ```

## from\$1jdbc\$1conf
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-writer-from_jdbc_conf"></a>

**`from_jdbc_conf(frame, catalog_connection, connection_options={}, redshift_tmp_dir = "", transformation_ctx="")`**

Écrit un `DynamicFrame` à l'aide des informations de connexion JDBC spécifiées.
+ `frame` – Objet `DynamicFrame` à écrire.
+ `catalog_connection` – Connexion de catalogue à utiliser.
+ `connection_options` – Options de connexion, telles que le chemin et la table de base de données (facultatif).
+ `redshift_tmp_dir` – répertoire Amazon Redshift temporaire à utiliser (facultatif).
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).

## Exemple pour write\$1dynamic\$1frame
<a name="pyspark-WriteDynamicFrame-examples"></a>

Cet exemple écrit la sortie localement en utilisant un `connection_type` de S3 avec un argument de chemin POSIX dans `connection_options`, ce qui permet d'écrire dans le stockage local.

```
glueContext.write_dynamic_frame.from_options(\
frame = dyf_splitFields,\
connection_options = {'path': '/home/glue/GlueLocalOutput/'},\
connection_type = 's3',\
format = 'json')
```

# DynamicFrameReader classe
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader"></a>

##  – méthodes –
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader-_methods"></a>
+ [\$1\$1init\$1\$1](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader-__init__)
+ [from\$1rdd](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader-from_rdd)
+ [from\$1options](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader-from_options)
+ [from\$1catalog](#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader-from_catalog)

## \$1\$1init\$1\$1
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader-__init__"></a>

**`__init__(glue_context)`**
+ `glue_context` – [GlueContext classe](aws-glue-api-crawler-pyspark-extensions-glue-context.md) à utiliser.

## from\$1rdd
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader-from_rdd"></a>

**`from_rdd(data, name, schema=None, sampleRatio=None)`**

Lit un `DynamicFrame` à partir d’un RDD (Resilient Distributed Dataset).
+ `data` – Ensemble de données à partir duquel lire.
+ `name` – Nom à partir duquel lire.
+ `schema` – Schéma à lire (facultatif).
+ `sampleRatio` – Exemple de ratio (facultatif).

## from\$1options
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader-from_options"></a>

**`from_options(connection_type, connection_options={}, format=None, format_options={}, transformation_ctx="")`**

Lit un `DynamicFrame` à l’aide de la connexion et du format spécifiés.
+ `connection_type` – type de connexion. Les valeurs valides sont les suivantes : `s3`, `mysql`, `postgresql`, `redshift`, `sqlserver`, `oracle`, `dynamodb` et `snowflake`.
+ `connection_options` – Options de connexion, telles que le chemin et la table de base de données (facultatif). Pour plus d'informations, consultez [Types de connexion et options pour l'ETL dans AWS Glue for Spark](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html). Pour un `connection_type` de `s3`, les chemins Amazon S3 sont définis dans un tableau.

  ```
  connection_options = {"paths": [ "s3://amzn-s3-demo-bucket/object_a", "s3://amzn-s3-demo-bucket/object_b"]}
  ```

  Pour les connexions JDBC, plusieurs propriétés doivent être définies. Notez que le nom de base de données doit être inclus dans l’URL. Il peut éventuellement être inclus dans les options de connexion.
**Avertissement**  
Il n’est pas recommandé de stocker des mots de passe dans votre script. Envisagez de les utiliser `boto3` pour les extraire AWS Secrets Manager du catalogue de données AWS Glue.

  ```
  connection_options = {"url": "jdbc-url/database", "user": "username", "password": passwordVariable,"dbtable": "table-name", "redshiftTmpDir": "s3-tempdir-path"} 
  ```

  Pour une connexion JDBC qui effectue des lectures parallèles, vous pouvez définir l'option hashfield. Par exemple :

  ```
  connection_options = {"url": "jdbc-url/database", "user": "username", "password": passwordVariable,"dbtable": "table-name", "redshiftTmpDir": "s3-tempdir-path" , "hashfield": "month"} 
  ```

  Pour de plus amples informations, veuillez consulter [Lecture en parallèle à partir de tables JDBC](run-jdbc-parallel-read-job.md). 
+ `format` – spécification de format (facultatif). Utilisée pour une connexion Amazon Simple Storage Service (Amazon S3) ou une connexion AWS Glue qui prend en charge plusieurs formats. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `format_options` – options de format pour le format spécifié. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).
+ `push_down_predicate` – filtre les partitions sans avoir à répertorier ni lire tous les fichiers de votre jeu de données. Pour plus d’informations, consultez [Pre-Filtering Using Pushdown Predicates](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html#aws-glue-programming-etl-partitions-pushdowns).

## from\$1catalog
<a name="aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader-from_catalog"></a>

**`from_catalog(database, table_name, redshift_tmp_dir="", transformation_ctx="", push_down_predicate="", additional_options={})`**

Lit un `DynamicFrame` à l’aide de l’espace de noms et du nom de table du catalogue spécifié.
+ `database` – Base de données à partir de laquelle lire.
+ `table_name` – Nom de la table à partir de laquelle lire.
+ `redshift_tmp_dir` – répertoire Amazon Redshift temporaire à utiliser (facultatif s’il ne lit pas les données provenant de Redshift).
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).
+ `push_down_predicate` – filtre les partitions sans avoir à répertorier ni lire tous les fichiers de votre jeu de données. Pour de plus amples informations, veuillez consulter [Préfiltrage à l'aide des prédicats pushdown](aws-glue-programming-etl-partitions.md#aws-glue-programming-etl-partitions-pushdowns).
+ `additional_options` — Options supplémentaires fournies à AWS Glue. 
  + Pour utiliser une connexion JDBC qui effectue des lectures parallèles, vous pouvez définir les options `hashfield`, `hashexpression` ou `hashpartitions`. Par exemple :

    ```
    additional_options = {"hashfield": "month"} 
    ```

    Pour de plus amples informations, veuillez consulter [Lecture en parallèle à partir de tables JDBC](run-jdbc-parallel-read-job.md). 
  + Pour passer une expression de catalogue à filtrer en fonction des colonnes d’index, vous pouvez voir l’option `catalogPartitionPredicate`.

    `catalogPartitionPredicate` – vous pouvez passer une expression de catalogue à filtrer en fonction des colonnes d’index. Cela envoie le filtrage du côté serveur. Pour en savoir plus, consultez [AWS Glue Indexes de partition](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html). Notez que `push_down_predicate` et `catalogPartitionPredicate` utilisent des syntaxes différentes. Le premier utilise la syntaxe standard SQL Spark et le dernier utilise l’analyseur JSQL.

    Pour de plus amples informations, veuillez consulter [Gestion des partitions pour la sortie ETL dans AWS Glue](aws-glue-programming-etl-partitions.md). 

# GlueContext classe
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context"></a>

Encapsule l'[SparkContext](https://spark.apache.org/docs/latest/api/java/org/apache/spark/SparkContext.html)objet Apache Spark et fournit ainsi des mécanismes permettant d'interagir avec la plateforme Apache Spark.

## \$1\$1init\$1\$1
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-__init__"></a>

**`__init__(sparkContext)`**
+ `sparkContext` – Contexte Apache Spark à utiliser.

## Création
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-_creating"></a>
+ [\$1\$1init\$1\$1](#aws-glue-api-crawler-pyspark-extensions-glue-context-__init__)
+ [getSource](#aws-glue-api-crawler-pyspark-extensions-glue-context-get-source)
+ [create\$1dynamic\$1frame\$1from\$1rdd](#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_rdd)
+ [create\$1dynamic\$1frame\$1from\$1catalog](#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_catalog)
+ [create\$1dynamic\$1frame\$1from\$1options](#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_options)
+ [create\$1sample\$1dynamic\$1frame\$1from\$1catalog](#aws-glue-api-crawler-pyspark-extensions-glue-context-create-sample-dynamic-frame-from-catalog)
+ [create\$1sample\$1dynamic\$1frame\$1from\$1options](#aws-glue-api-crawler-pyspark-extensions-glue-context-create-sample-dynamic-frame-from-options)
+ [add\$1ingestion\$1time\$1columns](#aws-glue-api-crawler-pyspark-extensions-glue-context-add-ingestion-time-columns)
+ [create\$1data\$1frame\$1from\$1catalog](#aws-glue-api-crawler-pyspark-extensions-glue-context-create-dataframe-from-catalog)
+ [create\$1data\$1frame\$1from\$1options](#aws-glue-api-crawler-pyspark-extensions-glue-context-create-dataframe-from-options)
+ [forEachBatch](#aws-glue-api-crawler-pyspark-extensions-glue-context-forEachBatch)

## getSource
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-get-source"></a>

**`getSource(connection_type, transformation_ctx = "", **options)`**

Crée un objet `DataSource` qui peut être utilisé pour lire `DynamicFrames` à partir de sources externes.
+ `connection_type` – type de connexion à utiliser, tel qu’Amazon Simple Storage Service (Amazon S3), Amazon Redshift et JDBC. Les valeurs valides sont les suivantes : `s3`, `mysql`, `postgresql`, `redshift`, `sqlserver`, `oracle` et `dynamodb`.
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).
+ `options` – Ensemble de paires nom-valeur facultatives. Pour plus d'informations, consultez [Types et options de connexion pour ETL dans AWS Glue pour Spark](aws-glue-programming-etl-connect.md).

Voici un exemple d’utilisation de  : `getSource`.

```
>>> data_source = context.getSource("file", paths=["/in/path"])
>>> data_source.setFormat("json")
>>> myFrame = data_source.getFrame()
```

## create\$1dynamic\$1frame\$1from\$1rdd
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_rdd"></a>

**`create_dynamic_frame_from_rdd(data, name, schema=None, sample_ratio=None, transformation_ctx="")`**

Renvoie un objet `DynamicFrame` créé à partir d’un RDD (Resilient Distributed Dataset) Apache Spark.
+ `data` –- La source de données à utiliser.
+ `name` – Nom des données à utiliser.
+ `schema` – Schéma à utiliser (facultatif).
+ `sample_ratio` – Exemple de ratio à utiliser (facultatif).
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).

## create\$1dynamic\$1frame\$1from\$1catalog
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_catalog"></a>

**`create_dynamic_frame_from_catalog(database, table_name, redshift_tmp_dir, transformation_ctx = "", push_down_predicate= "", additional_options = {}, catalog_id = None)`**

Renvoie un objet `DynamicFrame` créé à l’aide d’un nom de table et de base de données Data Catalog. Lorsque vous utilisez cette méthode, vous fournissez des `format_options` propriétés de table sur la table AWS Glue Data Catalog spécifiée et d'autres options via l'`additional_options`argument.
+ `Database` – Base de données à partir de laquelle lire.
+ `table_name` – Nom de la table à partir de laquelle lire.
+ `redshift_tmp_dir` – répertoire Amazon Redshift temporaire à utiliser (facultatif).
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).
+ `push_down_predicate` – filtre les partitions sans avoir à répertorier ni lire tous les fichiers de votre jeu de données. Pour connaître les sources prises en charge et les limites, consultez [Optimisation des lectures avec pushdown dans AWS Glue ETL](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-pushdown.html). Pour de plus amples informations, veuillez consulter [Préfiltrage à l'aide des prédicats pushdown](aws-glue-programming-etl-partitions.md#aws-glue-programming-etl-partitions-pushdowns).
+ `additional_options` — Ensemble de paires nom-valeur facultatives. Les options possibles comprennent celles répertoriées dans [Types et options de connexion pour ETL dans AWS Glue pour Spark](aws-glue-programming-etl-connect.md), sauf pour `endpointUrl`, `streamName`, `bootstrap.servers`, `security.protocol`, `topicName`, `classification` et `delimiter`. Est une autre option prise en charge  `catalogPartitionPredicate`:

  `catalogPartitionPredicate` – Vous pouvez passer une expression de catalogue à filtrer en fonction des colonnes d'index. Cela envoie le filtrage du côté serveur. Pour en savoir plus, consultez [AWS Glue Indexes de partition](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html). Notez que `push_down_predicate` et `catalogPartitionPredicate` utilisent des syntaxes différentes. Le premier utilise la syntaxe standard SQL Spark et le dernier utilise l'analyseur JSQL.
+ `catalog_id` – ID du catalogue (ID du compte) Data Catalog auquel vous accédez. Lorsque la valeur est Aucun, l'ID de compte par défaut de l'appelant est utilisé. 

## create\$1dynamic\$1frame\$1from\$1options
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_options"></a>

**`create_dynamic_frame_from_options(connection_type, connection_options={}, format=None, format_options={}, transformation_ctx = "")`**

Renvoie un `DynamicFrame` créé avec la connexion et le format spécifiés.
+ `connection_type` – type de connexion, tel qu'Amazon S3, Amazon Redshift et JDBC. Les valeurs valides sont les suivantes : `s3`, `mysql`, `postgresql`, `redshift`, `sqlserver`, `oracle` et `dynamodb`.
+ `connection_options` – options de connexion, telles que les chemins et la table de base de données (facultatif). Pour un `connection_type` de `s3`, une liste de chemins Amazon S3 est définie.

  ```
  connection_options = {"paths": ["s3://aws-glue-target/temp"]}
  ```

  Pour les connexions JDBC, plusieurs propriétés doivent être définies. Notez que le nom de base de données doit être inclus dans l’URL. Il peut éventuellement être inclus dans les options de connexion.
**Avertissement**  
Il n’est pas recommandé de stocker des mots de passe dans votre script. Envisagez de les utiliser `boto3` pour les récupérer depuis AWS Secrets Manager le catalogue de données AWS Glue.

  ```
  connection_options = {"url": "jdbc-url/database", "user": "username", "password": passwordVariable,"dbtable": "table-name", "redshiftTmpDir": "s3-tempdir-path"} 
  ```

  La propriété `dbtable` est le nom de la table JDBC. Pour les magasins de données JDBC qui prennent en charge les schémas dans une base de données, spécifiez `schema.table-name`. Si aucun schéma n'est fourni, c'est le schéma « public » par défaut qui est utilisé.

  Pour de plus amples informations, veuillez consulter [Types et options de connexion pour ETL dans AWS Glue pour Spark](aws-glue-programming-etl-connect.md).
+ `format` : une spécification de format. Utilisée pour une connexion Amazon S3 ou AWS Glue prenant en charge plusieurs formats. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `format_options` – options de format pour le format spécifié. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).
+ `push_down_predicate` – filtre les partitions sans avoir à répertorier ni lire tous les fichiers de votre jeu de données. Pour connaître les sources prises en charge et les limites, consultez [Optimisation des lectures avec pushdown dans AWS Glue ETL](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-pushdown.html). Pour plus d’informations, consultez [Pre-Filtering Using Pushdown Predicates](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html#aws-glue-programming-etl-partitions-pushdowns).

## create\$1sample\$1dynamic\$1frame\$1from\$1catalog
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-create-sample-dynamic-frame-from-catalog"></a>

**`create_sample_dynamic_frame_from_catalog(database, table_name, num, redshift_tmp_dir, transformation_ctx = "", push_down_predicate= "", additional_options = {}, sample_options = {}, catalog_id = None)`**

Retourne un objet `DynamicFrame` créé à l’aide d’un nom de tableau et de base de données Data Catalog. Le `DynamicFrame` ne contient que les premiers enregistrements `num` provenant d'une source de données. 
+ `database` – Base de données à partir de laquelle lire.
+ `table_name` – Nom de la table à partir de laquelle lire.
+ `num` – Nombre maximal d'enregistrements dans la trame dynamique d'échantillon renvoyée.
+ `redshift_tmp_dir` – répertoire Amazon Redshift temporaire à utiliser (facultatif).
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).
+ `push_down_predicate` – filtre les partitions sans avoir à répertorier ni lire tous les fichiers de votre jeu de données. Pour plus d'informations, consultez [Préfiltrage à l'aide des prédicats pushdown](aws-glue-programming-etl-partitions.md#aws-glue-programming-etl-partitions-pushdowns).
+ `additional_options` — Ensemble de paires nom-valeur facultatives. Les options possibles comprennent celles répertoriées dans [Types et options de connexion pour ETL dans AWS Glue pour Spark](aws-glue-programming-etl-connect.md), sauf pour `endpointUrl`, `streamName`, `bootstrap.servers`, `security.protocol`, `topicName`, `classification` et `delimiter`.
+ `sample_options` — Paramètres permettant de contrôler le comportement d'échantillonnage (facultatif). Paramètres disponibles actuels pour les sources Amazon S3 :
  + `maxSamplePartitions` — Nombre maximal de partitions que l'échantillonnage lira. Valeur par défaut : 10
  + `maxSampleFilesPerPartition` — Nombre maximal de fichiers que l'échantillonnage lira dans une partition. Valeur par défaut : 10.

    Ces paramètres permettent de réduire le temps consommé par la liste des fichiers. Par exemple, supposons que le jeu de données comporte 1 000 partitions et que chaque partition comporte 10 fichiers. Si vous définissez `maxSamplePartitions` = 10, et `maxSampleFilesPerPartition` = 10, au lieu de répertorier les 10 000 fichiers, l'échantillonnage ne listera et ne lira que les 10 premières partitions avec les 10 premiers fichiers de chacun : 10\$110 = 100 au total. 
+ `catalog_id` – ID du catalogue Data Catalog auquel vous accédez (ID du compte Data Catalog). Valeur définie sur `None` par défaut. `None` correspond par défaut à l'ID de catalogue du compte ayant initié l'appel dans le service.

## create\$1sample\$1dynamic\$1frame\$1from\$1options
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-create-sample-dynamic-frame-from-options"></a>

**`create_sample_dynamic_frame_from_options(connection_type, connection_options={}, num, sample_options={}, format=None, format_options={}, transformation_ctx = "")`**

Renvoie un `DynamicFrame` créé avec la connexion et le format spécifiés. Le `DynamicFrame` ne contient que les premiers enregistrements `num` provenant d'une source de données. 
+ `connection_type` – type de connexion, tel qu'Amazon S3, Amazon Redshift et JDBC. Les valeurs valides sont les suivantes : `s3`, `mysql`, `postgresql`, `redshift`, `sqlserver`, `oracle` et `dynamodb`.
+ `connection_options` – options de connexion, telles que les chemins et la table de base de données (facultatif). Pour plus d'informations, consultez [Types et options de connexion pour ETL dans AWS Glue pour Spark](aws-glue-programming-etl-connect.md).
+ `num` – Nombre maximal d'enregistrements dans la trame dynamique d'échantillon renvoyée.
+ `sample_options` — Paramètres permettant de contrôler le comportement d'échantillonnage (facultatif). Paramètres disponibles actuels pour les sources Amazon S3 :
  + `maxSamplePartitions` — Nombre maximal de partitions que l'échantillonnage lira. Valeur par défaut : 10
  + `maxSampleFilesPerPartition` — Nombre maximal de fichiers que l'échantillonnage lira dans une partition. Valeur par défaut : 10.

    Ces paramètres permettent de réduire le temps consommé par la liste des fichiers. Par exemple, supposons que le jeu de données comporte 1 000 partitions et que chaque partition comporte 10 fichiers. Si vous définissez `maxSamplePartitions` = 10, et `maxSampleFilesPerPartition` = 10, au lieu de répertorier les 10 000 fichiers, l'échantillonnage ne listera et ne lira que les 10 premières partitions avec les 10 premiers fichiers de chacun : 10\$110 = 100 au total. 
+ `format` : une spécification de format. Utilisée pour une connexion Amazon S3 ou AWS Glue prenant en charge plusieurs formats. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `format_options` – options de format pour le format spécifié. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).
+ `push_down_predicate` – filtre les partitions sans avoir à répertorier ni lire tous les fichiers de votre jeu de données. Pour plus d'informations, consultez [Préfiltrage à l'aide des prédicats pushdown](aws-glue-programming-etl-partitions.md#aws-glue-programming-etl-partitions-pushdowns).

## add\$1ingestion\$1time\$1columns
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-add-ingestion-time-columns"></a>

**`add_ingestion_time_columns(dataFrame, timeGranularity = "")`**

Ajoute des colonnes de temps d’ingestion, telles que `ingest_year`, `ingest_month`, `ingest_day`, `ingest_hour`, `ingest_minute` à l’entrée `DataFrame`. Cette fonction est automatiquement générée dans le script généré par AWS Glue lorsque vous spécifiez une table Data Catalog avec Amazon S3 comme cible. Cette fonction met automatiquement à jour la partition avec les colonnes de temps d’ingestion sur la table de sortie. Cela permet aux données de sortie d’être automatiquement partitionnées à l’heure d’ingestion sans nécessiter de colonnes d’heure d’ingestion explicites dans les données d’entrée.
+ `dataFrame` – `dataFrame` auquel ajouter les colonnes de temps d’ingestion.
+ `timeGranularity` — granularité des colonnes de temps. Les valeurs valides sont « `day` », « `hour` » et « `minute` ». Par exemple, si « `hour` » est transmis à la fonction, les colonnes de temps « `ingest_year` », « `ingest_month` », « `ingest_day` » et « `ingest_hour` » seront ajoutées à l’original « `dataFrame` ».

Renvoie le bloc de données après l’ajout des colonnes de granularité temporelle.

Exemple :

```
dynamic_frame = DynamicFrame.fromDF(glueContext.add_ingestion_time_columns(dataFrame, "hour"))
```

## create\$1data\$1frame\$1from\$1catalog
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-create-dataframe-from-catalog"></a>

**`create_data_frame_from_catalog(database, table_name, transformation_ctx = "", additional_options = {})`**

Renvoie un objet `DataFrame` créé à l’aide d’un nom de table et de base de données Data Catalog.
+ `database` – base de données Data Catalog à lire.
+ `table_name` – nom de la table Data Catalogà partir de laquelle lire.
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).
+ `additional_options` – Ensemble de paires nom-valeur facultatives. Les options possibles incluent celles répertoriées dans [Types et options de connexion pour ETL dans AWS Glue pour Spark](aws-glue-programming-etl-connect.md) pour les sources de streaming, telles que `startingPosition`, `maxFetchTimeInMs` et `startingOffsets`.
  + `useSparkDataSource`— Lorsque ce paramètre est défini sur true, force AWS Glue à utiliser l'API native de source de données Spark pour lire le tableau. L’API Spark Data Source prend en charge les formats suivants : AVRO, binaire, CSV, JSON, ORC, Parquet et texte. Dans une table Data Catalog, vous spécifiez le format à l’aide de la propriété `classification`. Pour en savoir plus sur l’API Spark Data Source, consultez la [documentation officielle d’Apache Spark](https://spark.apache.org/docs/latest/sql-data-sources-load-save-functions.html).

    L’utilisation de `create_data_frame_from_catalog` avec `useSparkDataSource` offre les avantages suivants :
    + Renvoie directement un `DataFrame` et fournit une alternative à `create_dynamic_frame.from_catalog().toDF()`.
    + Prend en charge le contrôle des autorisations AWS Lake Formation au niveau de la table pour les formats natifs.
    + Prend en charge la lecture des formats de lacs de données sans contrôle des autorisations AWS Lake Formation au niveau de la table. Pour de plus amples informations, veuillez consulter [Utilisation de frameworks de lacs de données avec des tâches AWS Glue ETL](aws-glue-programming-etl-datalake-native-frameworks.md).

    Lorsque vous l'activez`useSparkDataSource`, vous pouvez également ajouter n'importe laquelle des [options de source de données Spark](https://spark.apache.org/docs/latest/sql-data-sources.html) `additional_options` selon vos besoins. AWS Glue transmet ces options directement au lecteur Spark.
  + `useCatalogSchema`— Lorsqu'il est défini sur true, AWS Glue applique le schéma du catalogue de données au résultat`DataFrame`. Sinon, le lecteur déduit le schéma à partir des données. Lorsque vous activez `useCatalogSchema`, vous devez également définir `useSparkDataSource` sur true.

**Limites**

Lorsque vous utilisez l'option `useSparkDataSource`, tenez compte des restrictions suivantes :
+ Lorsque vous l'utilisez`useSparkDataSource`, AWS Glue en crée une nouvelle `DataFrame` dans une session Spark distincte, différente de la session Spark d'origine.
+ Le filtrage des DataFrame partitions Spark ne fonctionne pas avec les fonctionnalités de AWS Glue suivantes. 
  + [Signets de tâche](monitor-continuations.md)
  + [Exclusion des classes de stockage Amazon S3](aws-glue-programming-etl-storage-classes.md#aws-glue-programming-etl-storage-classes-dynamic-frame)
  + [Prédicats de partition de catalogue](aws-glue-programming-etl-partitions.md#aws-glue-programming-etl-partitions-cat-predicates)

  Pour utiliser le filtrage des partitions avec ces fonctionnalités, vous pouvez utiliser le prédicat AWS Glue pushdown. Pour de plus amples informations, veuillez consulter [Préfiltrage à l'aide des prédicats pushdown](aws-glue-programming-etl-partitions.md#aws-glue-programming-etl-partitions-pushdowns). Le filtrage sur les colonnes non partitionnées n’est pas concerné.

  L’exemple de script suivant illustre un filtrage de partition inadéquat à l’aide de l’option `excludeStorageClasses`.

  ```
  // Incorrect partition filtering using Spark filter with excludeStorageClasses
  read_df = glueContext.create_data_frame.from_catalog(
      database=database_name,
      table_name=table_name,
      additional_options = {
        "useSparkDataSource": True,
        "excludeStorageClasses" : ["GLACIER", "DEEP_ARCHIVE"]
      }
  )
  
  //  Suppose year and month are partition keys.
  //  Filtering on year and month won't work, the filtered_df will still
  //  contain data with other year/month values.
  filtered_df = read_df.filter("year == '2017 and month == '04' and 'state == 'CA'")
  ```

  L’exemple de script suivant illustre l’utilisation adéquate d’un prédicat pushdown dans le cadre d’un filtrage de partition à l’aide de l’option `excludeStorageClasses`.

  ```
  // Correct partition filtering using the AWS Glue pushdown predicate
  // with excludeStorageClasses
  read_df = glueContext.create_data_frame.from_catalog(
      database=database_name,
      table_name=table_name,
      //  Use AWS Glue pushdown predicate to perform partition filtering
      push_down_predicate = "(year=='2017' and month=='04')"
      additional_options = {
        "useSparkDataSource": True,
        "excludeStorageClasses" : ["GLACIER", "DEEP_ARCHIVE"]
      }
  )
  
  //  Use Spark filter only on non-partitioned columns
  filtered_df = read_df.filter("state == 'CA'")
  ```

**Exemple : Création d’une table CSV à l’aide du lecteur de source de données Spark**

```
//  Read a CSV table with '\t' as separator
read_df = glueContext.create_data_frame.from_catalog(
    database=<database_name>,
    table_name=<table_name>,
    additional_options = {"useSparkDataSource": True,  "sep": '\t'}
)
```

## create\$1data\$1frame\$1from\$1options
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-create-dataframe-from-options"></a>

**`create_data_frame_from_options(connection_type, connection_options={}, format=None, format_options={}, transformation_ctx = "")`**

Cette API est désormais obsolète. Utilisez plutôt les API `getSource()`. Renvoie un `DataFrame` créé avec la connexion et le format spécifiés. Utilisez cette fonction uniquement avec les sources de streaming AWS Glue.
+ `connection_type` – type de connexion en streaming. Les valeurs valides sont `kinesis` et `kafka`.
+ `connection_options` – options de connexion, qui sont différentes pour Kinesis et Kafka. Vous trouverez la liste de toutes les options de connexion pour chaque source de données de streaming sur la page [Types et options de connexion pour ETL dans AWS Glue pour Spark](aws-glue-programming-etl-connect.md). Notez les différences suivantes dans les options de connexion en streaming :
  + Les sources de streaming Kinesis nécessitent `streamARN`, `startingPosition`, `inferSchema` et `classification`.
  + Les sources de streaming Kafka nécessitent `connectionName`, `topicName`, `startingOffsets`, `inferSchema` et `classification`.
+ `format` : une spécification de format. Utilisée pour une connexion Amazon S3 ou AWS Glue prenant en charge plusieurs formats. Pour plus d’informations sur les formats pris en charge, consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md).
+ `format_options` – options de format pour le format spécifié. Pour de plus amples informations sur les options de formats pris en charge, veuillez consulter [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md).
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).

Exemple pour la source de streaming Amazon Kinesis :

```
kinesis_options =
   { "streamARN": "arn:aws:kinesis:us-east-2:777788889999:stream/fromOptionsStream",
     "startingPosition": "TRIM_HORIZON", 
     "inferSchema": "true", 
     "classification": "json" 
   }
data_frame_datasource0 = glueContext.create_data_frame.from_options(connection_type="kinesis", connection_options=kinesis_options)
```

Exemple pour la source de streaming Kafka :

```
kafka_options =
    { "connectionName": "ConfluentKafka", 
      "topicName": "kafka-auth-topic", 
      "startingOffsets": "earliest", 
      "inferSchema": "true", 
      "classification": "json" 
    }
data_frame_datasource0 = glueContext.create_data_frame.from_options(connection_type="kafka", connection_options=kafka_options)
```

## forEachBatch
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-forEachBatch"></a>

**`forEachBatch(frame, batch_function, options)`**

S’applique à `batch_function` transmis à chaque micro-lot lu à partir de la source de streaming.
+ `frame`— Le DataFrame contenant le microlot actuel.
+ `batch_function` — fonction qui sera appliquée à chaque micro-lot.
+ `options` — collection de paires clé-valeur qui contient des informations sur le traitement de micro-lots. Les options suivantes sont requises :
  + `windowSize` — durée de traitement de chaque lot.
  + `checkpointLocation` — emplacement dans lequel les points de contrôle sont stockés pour la tâche ETL en streaming.
  + `batchMaxRetries` – nombre maximum de nouvelles tentatives pour ce lot en cas d’échec. La valeur par défaut est 3. Cette option n’est configurable que pour Glue version 2.0 et ultérieure.

**Exemple :**

```
glueContext.forEachBatch(
    frame = data_frame_datasource0,
    batch_function = processBatch, 
    options = {
        "windowSize": "100 seconds", 
        "checkpointLocation": "s3://kafka-auth-dataplane/confluent-test/output/checkpoint/"
    }
)
   
def processBatch(data_frame, batchId):
    if (data_frame.count() > 0):
        datasource0 = DynamicFrame.fromDF(
          glueContext.add_ingestion_time_columns(data_frame, "hour"), 
          glueContext, "from_data_frame"
        )
        additionalOptions_datasink1 = {"enableUpdateCatalog": True}
        additionalOptions_datasink1["partitionKeys"] = ["ingest_yr", "ingest_mo", "ingest_day"]
        datasink1 = glueContext.write_dynamic_frame.from_catalog(
          frame = datasource0, 
          database = "tempdb", 
          table_name = "kafka-auth-table-output", 
          transformation_ctx = "datasink1", 
          additional_options = additionalOptions_datasink1
        )
```

## Utilisation des jeux de données dans Amazon S3
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-_storage_layer"></a>
+ [purge\$1table](#aws-glue-api-crawler-pyspark-extensions-glue-context-purge_table)
+ [purge\$1s3\$1path](#aws-glue-api-crawler-pyspark-extensions-glue-context-purge_s3_path)
+ [transition\$1table](#aws-glue-api-crawler-pyspark-extensions-glue-context-transition_table)
+ [transition\$1s3\$1path](#aws-glue-api-crawler-pyspark-extensions-glue-context-transition_s3_path)

## purge\$1table
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-purge_table"></a>

**`purge_table(catalog_id=None, database="", table_name="", options={}, transformation_ctx="")`**

Supprime les fichiers d’Amazon S3 pour la base de données et la table spécifiés pour le catalogue. Si tous les fichiers d’une partition sont supprimés, cette partition est également éliminée du catalogue. Nous ne prenons pas en charge l’action purge\$1table sur les tables enregistrées auprès de Lake Formation.

Pour pouvoir récupérer des objets supprimés, vous pouvez activer la [gestion des versions d'objet](https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectVersioning.html) au niveau du compartiment Amazon S3. Lorsqu'un objet est supprimé d'un compartiment pour lequel la gestion des versions d'objet n'est pas activée, il ne peut pas être récupéré. Pour plus d’informations sur la récupération d’objets supprimés dans un compartiment pour lequel la gestion des versions est activée, consultez [Comment récupérer un objet Amazon S3 qui a été supprimé ?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-undelete-configuration/) dans le Centre de connaissances AWS Support .
+ `catalog_id` – ID du catalogue Data Catalog auquel vous accédez (ID du compte Data Catalog). Valeur définie sur `None` par défaut. `None` correspond par défaut à l'ID de catalogue du compte ayant initié l'appel dans le service.
+ `database` – Base de données à utiliser.
+ `table_name` – nom de la table à utiliser.
+ `options` – options destinées au filtrage des fichiers à supprimer et à la génération des fichiers manifestes.
  + `retentionPeriod` – spécifie une période de conservation des fichiers, en nombre d'heures. Les dossiers dont la date est postérieure à cette période sont conservés. Par défaut, elle est réglée sur 168 heures (7 jours).
  + `partitionPredicate` – les partitions satisfaisant à ce prédicat sont supprimées. Les fichiers qui se situent dans la période de conservation pour ces partitions ne sont pas supprimés. Valeur définie sur `""` – vide par défaut.
  + `excludeStorageClasses` – les fichiers avec classe de stockage dans le jeu `excludeStorageClasses` ne sont pas supprimés. La valeur par défaut est `Set()` – jeu vide.
  + `manifestFilePath` – chemin facultatif pour la génération du fichier manifeste. Tous les fichiers qui ont été purgés avec succès sont enregistrés dans `Success.csv`, et ceux qui ont échoué dans `Failed.csv`
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif). Utilisé dans le chemin du fichier manifeste.

**Example**  

```
glueContext.purge_table("database", "table", {"partitionPredicate": "(month=='march')", "retentionPeriod": 1, "excludeStorageClasses": ["STANDARD_IA"], "manifestFilePath": "s3://bucketmanifest/"})
```

## purge\$1s3\$1path
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-purge_s3_path"></a>

**`purge_s3_path(s3_path, options={}, transformation_ctx="")`**

Supprime les fichiers du chemin Amazon S3 spécifié de manière récursive.

Pour pouvoir récupérer des objets supprimés, vous pouvez activer la [gestion des versions d'objet](https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectVersioning.html) au niveau du compartiment Amazon S3. Lorsqu'un objet est supprimé d'un compartiment pour lequel la gestion des versions d'objet n'est pas activée, il ne peut pas être récupéré. Pour plus d'informations sur la façon de récupérer des objets supprimés dans un compartiment avec gestion des versions, consultez [Comment puis-je récupérer un objet Amazon S3 qui a été supprimé ?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-undelete-configuration/) dans le Support Knowledge Center.
+ `s3_path` – chemin Amazon S3 des fichiers à supprimer dans le format `s3://<bucket>/<prefix>/`
+ `options` – options destinées au filtrage des fichiers à supprimer et à la génération des fichiers manifestes.
  + `retentionPeriod` – spécifie une période de conservation des fichiers, en nombre d'heures. Les dossiers dont la date est postérieure à cette période sont conservés. Par défaut, elle est réglée sur 168 heures (7 jours).
  + `excludeStorageClasses` – les fichiers avec classe de stockage dans le jeu `excludeStorageClasses` ne sont pas supprimés. La valeur par défaut est `Set()` – jeu vide.
  + `manifestFilePath` – chemin facultatif pour la génération du fichier manifeste. Tous les fichiers qui ont été purgés avec succès sont enregistrés dans `Success.csv`, et ceux qui ont échoué dans `Failed.csv`
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif). Utilisé dans le chemin du fichier manifeste.

**Example**  

```
glueContext.purge_s3_path("s3://bucket/path/", {"retentionPeriod": 1, "excludeStorageClasses": ["STANDARD_IA"], "manifestFilePath": "s3://bucketmanifest/"})
```

## transition\$1table
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-transition_table"></a>

**`transition_table(database, table_name, transition_to, options={}, transformation_ctx="", catalog_id=None)`**

Transition de la classe de stockage des fichiers stockés sur Amazon S3 pour la base de données et la table spécifiés pour le catalogue.

Vous pouvez effectuer une transition entre deux classes de stockage. Pour les classes de stockage `GLACIER` et `DEEP_ARCHIVE`, vous pouvez effectuer la transition vers ces classes. Cependant, vous devez utiliser `S3 RESTORE` pour effectuer la transition des classes de stockage `GLACIER` et `DEEP_ARCHIVE`.

Si vous exécutez des tâches ETL AWS Glue qui lisent des fichiers ou des partitions à partir d'Amazon S3, vous pouvez exclure certains types de classe de stockage Amazon S3. Pour plus d'informations, consultez [Exclusion des classes de stockage Amazon S3](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-storage-classes.html).
+ `database` – Base de données à utiliser.
+ `table_name` – nom de la table à utiliser.
+ `transition_to` – [classe de stockage Amazon S3](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/StorageClass.html) vers laquelle effectuer la transition.
+ `options` – options destinées au filtrage des fichiers à supprimer et à la génération des fichiers manifestes.
  + `retentionPeriod` – spécifie une période de conservation des fichiers, en nombre d'heures. Les dossiers dont la date est postérieure à cette période sont conservés. Par défaut, elle est réglée sur 168 heures (7 jours).
  + `partitionPredicate` – une transition est effectuée pour les partitions satisfaisant à ce prédicat. Aucune transition n'a lieu pour les fichiers qui se trouvent dans la période de conservation. Valeur définie sur `""` – vide par défaut.
  + `excludeStorageClasses` – aucune transition n'a lieu pour les fichiers avec classe de stockage dans le jeu `excludeStorageClasses`. La valeur par défaut est `Set()` – jeu vide.
  + `manifestFilePath` – chemin facultatif pour la génération du fichier manifeste. Tous les fichiers dont la transition a été effectuée avec succès sont enregistrés dans `Success.csv`, et ceux qui ont échoué dans `Failed.csv`
  + `accountId` – ID de compte Amazon Web Services permettant d'exécuter la transformation de la transition. Obligatoire pour cette transformation.
  + `roleArn`— Le AWS rôle d'exécuter la transformation de transition. Obligatoire pour cette transformation.
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif). Utilisé dans le chemin du fichier manifeste.
+ `catalog_id` – ID du catalogue Data Catalog auquel vous accédez (ID du compte Data Catalog). Valeur définie sur `None` par défaut. `None` correspond par défaut à l'ID de catalogue du compte ayant initié l'appel dans le service.

**Example**  

```
glueContext.transition_table("database", "table", "STANDARD_IA", {"retentionPeriod": 1, "excludeStorageClasses": ["STANDARD_IA"], "manifestFilePath": "s3://bucketmanifest/", "accountId": "12345678901", "roleArn": "arn:aws:iam::123456789012:user/example-username"})
```

## transition\$1s3\$1path
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-transition_s3_path"></a>

**`transition_s3_path(s3_path, transition_to, options={}, transformation_ctx="")`**

Transition récursive de la classe de stockage des fichiers dans le chemin Amazon S3 spécifié.

Vous pouvez effectuer une transition entre deux classes de stockage. Pour les classes de stockage `GLACIER` et `DEEP_ARCHIVE`, vous pouvez effectuer la transition vers ces classes. Cependant, vous devez utiliser `S3 RESTORE` pour effectuer la transition des classes de stockage `GLACIER` et `DEEP_ARCHIVE`.

Si vous exécutez des tâches ETL AWS Glue qui lisent des fichiers ou des partitions à partir d'Amazon S3, vous pouvez exclure certains types de classe de stockage Amazon S3. Pour plus d'informations, consultez [Exclusion des classes de stockage Amazon S3](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-storage-classes.html).
+ `s3_path` – chemin Amazon S3 des fichiers à passer au format `s3://<bucket>/<prefix>/`
+ `transition_to` – [classe de stockage Amazon S3](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/StorageClass.html) vers laquelle effectuer la transition.
+ `options` – options destinées au filtrage des fichiers à supprimer et à la génération des fichiers manifestes.
  + `retentionPeriod` – spécifie une période de conservation des fichiers, en nombre d'heures. Les dossiers dont la date est postérieure à cette période sont conservés. Par défaut, elle est réglée sur 168 heures (7 jours).
  + `partitionPredicate` – une transition est effectuée pour les partitions satisfaisant à ce prédicat. Aucune transition n'a lieu pour les fichiers qui se trouvent dans la période de conservation. Valeur définie sur `""` – vide par défaut.
  + `excludeStorageClasses` – aucune transition n'a lieu pour les fichiers avec classe de stockage dans le jeu `excludeStorageClasses`. La valeur par défaut est `Set()` – jeu vide.
  + `manifestFilePath` – chemin facultatif pour la génération du fichier manifeste. Tous les fichiers dont la transition a été effectuée avec succès sont enregistrés dans `Success.csv`, et ceux qui ont échoué dans `Failed.csv`
  + `accountId` – ID de compte Amazon Web Services permettant d'exécuter la transformation de la transition. Obligatoire pour cette transformation.
  + `roleArn`— Le AWS rôle d'exécuter la transformation de transition. Obligatoire pour cette transformation.
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif). Utilisé dans le chemin du fichier manifeste.

**Example**  

```
glueContext.transition_s3_path("s3://bucket/prefix/", "STANDARD_IA", {"retentionPeriod": 1, "excludeStorageClasses": ["STANDARD_IA"], "manifestFilePath": "s3://bucketmanifest/", "accountId": "12345678901", "roleArn": "arn:aws:iam::123456789012:user/example-username"})
```

## Extraction
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-_extracting"></a>
+ [extract\$1jdbc\$1conf](#aws-glue-api-crawler-pyspark-extensions-glue-context-extract_jdbc_conf)

## extract\$1jdbc\$1conf
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-extract_jdbc_conf"></a>

**`extract_jdbc_conf(connection_name, catalog_id = None)`**

Retourne un `dict` dont les clés contiennent les propriétés de configuration de l’objet de connexion AWS Glue dans le catalogue de données.
+ `user` – Nom d’utilisateur de la base de données.
+ `password` – Le mot de passe de la base de données.
+ `vendor` – Spécifie un fournisseur (`mysql`, `postgresql`, `oracle`, `sqlserver`, etc.).
+ `enforceSSL` – Chaîne booléenne indiquant si une connexion sécurisée est requise.
+ `customJDBCCert` – Utilise un certificat client spécifique à partir du chemin Amazon S3 indiqué.
+ `skipCustomJDBCCertValidation` – Chaîne booléenne indiquant si le `customJDBCCert` doit être validé par une autorité de certification.
+ `customJDBCCertString` – Informations supplémentaires sur le certificat personnalisé, spécifique au type de pilote.
+ `url` – (Obsolète) URL JDBC avec uniquement le protocole, le serveur et le port.
+ `fullUrl` – URL JDBC telle qu’elle a été saisie lors de la création de la connexion (disponible dans la version AWS Glue 3.0 ou ultérieure).

Exemple de récupération de configurations JDBC :

```
jdbc_conf = glueContext.extract_jdbc_conf(connection_name="your_glue_connection_name")
print(jdbc_conf)
>>> {'enforceSSL': 'false', 'skipCustomJDBCCertValidation': 'false', 'url': 'jdbc:mysql://myserver:3306', 'fullUrl': 'jdbc:mysql://myserver:3306/mydb', 'customJDBCCertString': '', 'user': 'admin', 'customJDBCCert': '', 'password': '1234', 'vendor': 'mysql'}
```

## Transactions
<a name="aws-glue-api-pyspark-extensions-glue-context-transactions"></a>
+ [start\$1transaction](#aws-glue-api-pyspark-extensions-glue-context-start-transaction)
+ [commit\$1transaction](#aws-glue-api-pyspark-extensions-glue-context-commit-transaction)
+ [cancel\$1transaction](#aws-glue-api-pyspark-extensions-glue-cancel-transaction)

## start\$1transaction
<a name="aws-glue-api-pyspark-extensions-glue-context-start-transaction"></a>

**`start_transaction(read_only)`**

Démarrez une nouvelle transaction. Appelle en interne l’API [Démarrer la transaction](https://docs.aws.amazon.com/lake-formation/latest/dg/aws-lake-formation-api-aws-lake-formation-api-transactions.html#aws-lake-formation-api-aws-lake-formation-api-transactions-StartTransaction) Lake Formation.
+ `read_only` – Valeur booléenne indiquant si cette transaction doit être en lecture seule ou en lecture et en écriture. Les écritures effectuées à l’aide d’un ID de transaction en lecture seule seront rejetées. Les transactions en lecture seule n’ont pas besoin d’être validées.

Retourne l’ID de transaction.

## commit\$1transaction
<a name="aws-glue-api-pyspark-extensions-glue-context-commit-transaction"></a>

**`commit_transaction(transaction_id, wait_for_commit = True)`**

Tentative de validation de la transaction spécifiée.`commit_transaction` peut être renvoyé avant la fin de la validation de la transaction. Appelle en interne la Lake Formation [commitTransaction](https://docs.aws.amazon.com/lake-formation/latest/dg/aws-lake-formation-api-aws-lake-formation-api-transactions.html#aws-lake-formation-api-aws-lake-formation-api-transactions-CommitTransaction) API.
+ `transaction_id ` – (Chaîne) La transaction à valider.
+ `wait_for_commit` – (Booléen) Détermine si le `commit_transaction` retourne immédiatement. La valeur par défaut est True. Si elle est false,`commit_transaction` interroge et attend que la transaction soit validée. Le temps d’attente est limité à 1 minute en utilisant le backoff exponentiel avec un maximum de 6 tentatives de nouvelle tentative.

Renvoie une valeur de type Boolean pour indiquer si la validation est effectuée ou non. 

## cancel\$1transaction
<a name="aws-glue-api-pyspark-extensions-glue-cancel-transaction"></a>

**`cancel_transaction(transaction_id)`**

Tentative d’annulation de la transaction spécifiée. Retourne une exception `TransactionCommittedException` si la transaction a déjà été validée. Appelle en interne l'[CancelTransaction](https://docs.aws.amazon.com/lake-formation/latest/dg/aws-lake-formation-api-aws-lake-formation-api-transactions.html#aws-lake-formation-api-aws-lake-formation-api-transactions-CancelTransaction)API Lake Formation.
+ `transaction_id` – (Chaîne) La transaction à annuler.

## Ecriture
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-_writing"></a>
+ [getSink](#aws-glue-api-crawler-pyspark-extensions-glue-context-get-sink)
+ [write\$1dynamic\$1frame\$1from\$1options](#aws-glue-api-crawler-pyspark-extensions-glue-context-write_dynamic_frame_from_options)
+ [write\$1from\$1options](#aws-glue-api-crawler-pyspark-extensions-glue-context-write_from_options)
+ [write\$1dynamic\$1frame\$1from\$1catalog](#aws-glue-api-crawler-pyspark-extensions-glue-context-write_dynamic_frame_from_catalog)
+ [write\$1data\$1frame\$1from\$1catalog](#aws-glue-api-crawler-pyspark-extensions-glue-context-write_data_frame_from_catalog)
+ [write\$1dynamic\$1frame\$1from\$1jdbc\$1conf](#aws-glue-api-crawler-pyspark-extensions-glue-context-write_dynamic_frame_from_jdbc_conf)
+ [write\$1from\$1jdbc\$1conf](#aws-glue-api-crawler-pyspark-extensions-glue-context-write_from_jdbc_conf)

## getSink
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-get-sink"></a>

**`getSink(connection_type, format = None, transformation_ctx = "", **options)`**

Obtient un objet `DataSink` qui peut être utilisé pour écrire `DynamicFrames` sur des sources externes. Vérifiez d’abord le `format` SparkSQL pour être sûr d’obtenir le récepteur escompté.
+ `connection_type` – type de connexion à utiliser, telle qu’Amazon S3, Amazon Redshift et JDBC. Les valeurs valides sont les suivantes : `s3`, `mysql`, `postgresql`, `redshift`, `sqlserver`, `oracle`, `kinesis` et `kafka`.
+ `format` – Format SparkSQL à utiliser (facultatif).
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).
+ `options` –Ensemble de paires nom-valeur utilisées pour spécifier les options de connexion. Certaines des valeurs possibles sont les suivantes :
  + `user` et `password` : Pour autorisation
  + `url` : Point de terminaison du magasin de données
  + `dbtable` :Nom de la table cible
  + `bulkSize`: Degré de parallélisme pour les opérations d’insertion

Les options que vous pouvez spécifier dépendent du type de connexion. Pour obtenir d’autres conseils et d’autres exemples, veuillez consulter [Types et options de connexion pour ETL dans AWS Glue pour Spark](aws-glue-programming-etl-connect.md).

Exemple :

```
>>> data_sink = context.getSink("s3")
>>> data_sink.setFormat("json"),
>>> data_sink.writeFrame(myFrame)
```

## write\$1dynamic\$1frame\$1from\$1options
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-write_dynamic_frame_from_options"></a>

**`write_dynamic_frame_from_options(frame, connection_type, connection_options={}, format=None, format_options={}, transformation_ctx = "")`**

Écrit et retourne un `DynamicFrame` à l’aide de la connexion et du format spécifiés.
+ `frame` – Objet `DynamicFrame` à écrire.
+ `connection_type` – type de connexion, tel qu'Amazon S3, Amazon Redshift et JDBC. Les valeurs valides sont les suivantes : `s3`, `mysql`, `postgresql`, `redshift`, `sqlserver`, `oracle`, `kinesis` et `kafka`.
+ `connection_options` – Options de connexion, telles que le chemin et la table de base de données (facultatif). Pour un `connection_type` de `s3`, un chemin Amazon S3 est défini.

  ```
  connection_options = {"path": "s3://aws-glue-target/temp"}
  ```

  Pour les connexions JDBC, plusieurs propriétés doivent être définies. Notez que le nom de base de données doit être inclus dans l’URL. Il peut éventuellement être inclus dans les options de connexion.
**Avertissement**  
Il n’est pas recommandé de stocker des mots de passe dans votre script. Envisagez de les utiliser `boto3` pour les récupérer depuis AWS Secrets Manager le catalogue de données AWS Glue.

  ```
  connection_options = {"url": "jdbc-url/database", "user": "username", "password": passwordVariable,"dbtable": "table-name", "redshiftTmpDir": "s3-tempdir-path"} 
  ```

  La propriété `dbtable` est le nom de la table JDBC. Pour les magasins de données JDBC qui prennent en charge les schémas dans une base de données, spécifiez `schema.table-name`. Si aucun schéma n'est fourni, c'est le schéma « public » par défaut qui est utilisé.

  Pour de plus amples informations, veuillez consulter [Types et options de connexion pour ETL dans AWS Glue pour Spark](aws-glue-programming-etl-connect.md).
+ `format` : une spécification de format. Utilisée pour une connexion Amazon S3 ou AWS Glue prenant en charge plusieurs formats. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `format_options` – options de format pour le format spécifié. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).

## write\$1from\$1options
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-write_from_options"></a>

**`write_from_options(frame_or_dfc, connection_type, connection_options={}, format={}, format_options={}, transformation_ctx = "")`**

Écrit et renvoie un `DynamicFrame` ou `DynamicFrameCollection` qui est créé avec la connexion et les informations de format spécifiées.
+ `frame_or_dfc` – Objet `DynamicFrame` ou `DynamicFrameCollection` à écrire.
+ `connection_type` – type de connexion, tel qu'Amazon S3, Amazon Redshift et JDBC. Les valeurs valides sont `s3`, `mysql`, `postgresql`, `redshift`, `sqlserver` et `oracle`.
+ `connection_options` – Options de connexion, telles que le chemin et la table de base de données (facultatif). Pour un `connection_type` de `s3`, un chemin Amazon S3 est défini.

  ```
  connection_options = {"path": "s3://aws-glue-target/temp"}
  ```

  Pour les connexions JDBC, plusieurs propriétés doivent être définies. Notez que le nom de base de données doit être inclus dans l’URL. Il peut éventuellement être inclus dans les options de connexion.
**Avertissement**  
Il n’est pas recommandé de stocker des mots de passe dans votre script. Envisagez de les utiliser `boto3` pour les récupérer depuis AWS Secrets Manager le catalogue de données AWS Glue.

  ```
  connection_options = {"url": "jdbc-url/database", "user": "username", "password": passwordVariable,"dbtable": "table-name", "redshiftTmpDir": "s3-tempdir-path"} 
  ```

  La propriété `dbtable` est le nom de la table JDBC. Pour les magasins de données JDBC qui prennent en charge les schémas dans une base de données, spécifiez `schema.table-name`. Si aucun schéma n'est fourni, c'est le schéma « public » par défaut qui est utilisé.

  Pour de plus amples informations, veuillez consulter [Types et options de connexion pour ETL dans AWS Glue pour Spark](aws-glue-programming-etl-connect.md).
+ `format` : une spécification de format. Utilisée pour une connexion Amazon S3 ou AWS Glue prenant en charge plusieurs formats. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `format_options` – options de format pour le format spécifié. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).

## write\$1dynamic\$1frame\$1from\$1catalog
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-write_dynamic_frame_from_catalog"></a>

**`write_dynamic_frame_from_catalog(frame, database, table_name, redshift_tmp_dir, transformation_ctx = "", additional_options = {}, catalog_id = None)`**

Écrit et renvoie un objet `DynamicFrame` utilisant des informations provenant d'une table et d'une base de données Data Catalog.
+ `frame` – Objet `DynamicFrame` à écrire.
+ `Database` – base de données Data Catalog contenant la table.
+ `table_name` – nom de la table Data Catalog associée à la cible.
+ `redshift_tmp_dir` – répertoire Amazon Redshift temporaire à utiliser (facultatif).
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).
+ `additional_options` – Ensemble de paires nom-valeur facultatives.
+ `catalog_id` – ID du catalogue (ID du compte) Data Catalog auquel vous accédez. Lorsque la valeur est Aucun, l'ID de compte par défaut de l'appelant est utilisé. 

## write\$1data\$1frame\$1from\$1catalog
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-write_data_frame_from_catalog"></a>

**`write_data_frame_from_catalog(frame, database, table_name, redshift_tmp_dir, transformation_ctx = "", additional_options = {}, catalog_id = None)`**

Écrit et renvoie un objet `DataFrame` utilisant des informations provenant d'une table et d'une base de données Data Catalog. Cette méthode prend en charge l’écriture dans les formats de lac de données (Hudi, Iceberg et Delta Lake). Pour plus d'informations, consultez [Utilisation de frameworks de lacs de données avec des tâches AWS Glue ETL](aws-glue-programming-etl-datalake-native-frameworks.md).
+ `frame` – Objet `DataFrame` à écrire.
+ `Database` – base de données Data Catalog contenant la table.
+ `table_name` – nom de la table Data Catalog qui est associée à la cible.
+ `redshift_tmp_dir` – répertoire Amazon Redshift temporaire à utiliser (facultatif).
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).
+ `additional_options` – Ensemble de paires nom-valeur facultatives.
  + `useSparkDataSink`— Lorsque ce paramètre est défini sur true, force AWS Glue à utiliser l'API native de Spark Data Sink pour écrire dans la table. Lorsque vous activez cette option, vous pouvez ajouter toutes les [options de source de données Spark](https://spark.apache.org/docs/latest/sql-data-sources.html) selon `additional_options` vos besoins. AWS Glue transmet ces options directement au Spark Writer.
+ `catalog_id` – ID de catalogue (ID de compte) du catalogue de données auquel vous accédez. Si vous ne spécifiez aucune valeur, l’ID de compte par défaut de l’appelant est utilisé. 

**Limites**

Lorsque vous utilisez l'option `useSparkDataSink`, tenez compte des restrictions suivantes :
+ L’option [`enableUpdateCatalog`](update-from-job.md) n’est pas prise en charge lorsque vous utilisez l’option `useSparkDataSink`.

**Exemple : Écriture dans une table Hudi à l’aide de l’enregistreur de source de données Spark**

```
hudi_options = {
    'useSparkDataSink': True,
    'hoodie.table.name': <table_name>,
    'hoodie.datasource.write.storage.type': 'COPY_ON_WRITE',
    'hoodie.datasource.write.recordkey.field': 'product_id',
    'hoodie.datasource.write.table.name': <table_name>,
    'hoodie.datasource.write.operation': 'upsert',
    'hoodie.datasource.write.precombine.field': 'updated_at',
    'hoodie.datasource.write.hive_style_partitioning': 'true',
    'hoodie.upsert.shuffle.parallelism': 2,
    'hoodie.insert.shuffle.parallelism': 2,
    'hoodie.datasource.hive_sync.enable': 'true',
    'hoodie.datasource.hive_sync.database': <database_name>,
    'hoodie.datasource.hive_sync.table': <table_name>,
    'hoodie.datasource.hive_sync.use_jdbc': 'false',
    'hoodie.datasource.hive_sync.mode': 'hms'}

glueContext.write_data_frame.from_catalog(
    frame = <df_product_inserts>,
    database = <database_name>,
    table_name = <table_name>,
    additional_options = hudi_options
)
```

## write\$1dynamic\$1frame\$1from\$1jdbc\$1conf
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-write_dynamic_frame_from_jdbc_conf"></a>

**`write_dynamic_frame_from_jdbc_conf(frame, catalog_connection, connection_options={}, redshift_tmp_dir = "", transformation_ctx = "", catalog_id = None)`**

Écrit et retourne un `DynamicFrame` à l’aide des informations de connexion JDBC spécifiées.
+ `frame` – Objet `DynamicFrame` à écrire.
+ `catalog_connection` – Connexion de catalogue à utiliser.
+ `connection_options` – Options de connexion, telles que le chemin et la table de base de données (facultatif). Pour plus d'informations, consultez [Types et options de connexion pour ETL dans AWS Glue pour Spark](aws-glue-programming-etl-connect.md).
+ `redshift_tmp_dir` – répertoire Amazon Redshift temporaire à utiliser (facultatif).
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).
+ `catalog_id` – ID du catalogue (ID du compte) Data Catalog auquel vous accédez. Lorsque la valeur est Aucun, l'ID de compte par défaut de l'appelant est utilisé. 

## write\$1from\$1jdbc\$1conf
<a name="aws-glue-api-crawler-pyspark-extensions-glue-context-write_from_jdbc_conf"></a>

**`write_from_jdbc_conf(frame_or_dfc, catalog_connection, connection_options={}, redshift_tmp_dir = "", transformation_ctx = "", catalog_id = None)`**

Écrit et retourne un objet `DynamicFrame` ou `DynamicFrameCollection` à l’aide des informations de connexion JDBC spécifiées.
+ `frame_or_dfc` – Objet `DynamicFrame` ou `DynamicFrameCollection` à écrire.
+ `catalog_connection` – Connexion de catalogue à utiliser.
+ `connection_options` – Options de connexion, telles que le chemin et la table de base de données (facultatif). Pour plus d'informations, consultez [Types et options de connexion pour ETL dans AWS Glue pour Spark](aws-glue-programming-etl-connect.md).
+ `redshift_tmp_dir` – répertoire Amazon Redshift temporaire à utiliser (facultatif).
+ `transformation_ctx` – Contexte de transformation à utiliser (facultatif).
+ `catalog_id` – ID du catalogue (ID du compte) Data Catalog auquel vous accédez. Lorsque la valeur est Aucun, l'ID de compte par défaut de l'appelant est utilisé. 

# AWS Glue PySpark transforme la référence
<a name="aws-glue-programming-python-transforms"></a>

AWS Glue fournit les transformations intégrées suivantes que vous pouvez utiliser dans les opérations PySpark ETL. Vos données passent d'une transformation à l'autre dans une structure de données appelée a *DynamicFrame*, qui est une extension d'un SQL Apache Spark`DataFrame`. Le `DynamicFrame` contient vos données, et vous référencez son schéma pour traiter vos données. 

La plupart de ces transformations existent également en tant que méthodes de la classe `DynamicFrame`. Pour plus d'informations, consultez la section [DynamicFrame transformations](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-_transforms).
+ [GlueTransform classe de base](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md)
+ [ApplyMapping classe](aws-glue-api-crawler-pyspark-transforms-ApplyMapping.md)
+ [DropFields classe](aws-glue-api-crawler-pyspark-transforms-DropFields.md)
+ [DropNullFields classe](aws-glue-api-crawler-pyspark-transforms-DropNullFields.md)
+ [ErrorsAsDynamicFrame classe](aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame.md)
+ [EvaluateDataQuality classe](aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality.md)
+ [FillMissingValues classe](aws-glue-api-crawler-pyspark-transforms-fillmissingvalues.md)
+ [Classe Filter](aws-glue-api-crawler-pyspark-transforms-filter.md)
+ [FindIncrementalMatches classe](aws-glue-api-crawler-pyspark-transforms-findincrementalmatches.md)
+ [FindMatches classe](aws-glue-api-crawler-pyspark-transforms-findmatches.md)
+ [FlatMap classe](aws-glue-api-crawler-pyspark-transforms-flat-map.md)
+ [Classe Join](aws-glue-api-crawler-pyspark-transforms-join.md)
+ [Classe Map](aws-glue-api-crawler-pyspark-transforms-map.md)
+ [MapToCollection classe](aws-glue-api-crawler-pyspark-transforms-MapToCollection.md)
+ [mergeDynamicFrame](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-merge)
+ [Classe Relationalize](aws-glue-api-crawler-pyspark-transforms-Relationalize.md)
+ [RenameField classe](aws-glue-api-crawler-pyspark-transforms-RenameField.md)
+ [ResolveChoice classe](aws-glue-api-crawler-pyspark-transforms-ResolveChoice.md)
+ [SelectFields classe](aws-glue-api-crawler-pyspark-transforms-SelectFields.md)
+ [SelectFromCollection classe](aws-glue-api-crawler-pyspark-transforms-SelectFromCollection.md)
+ [Classe Simplify\$1ddb\$1json](aws-glue-api-crawler-pyspark-transforms-simplify-ddb-json.md)
+ [Classe Spigot](aws-glue-api-crawler-pyspark-transforms-spigot.md)
+ [SplitFields classe](aws-glue-api-crawler-pyspark-transforms-SplitFields.md)
+ [SplitRows classe](aws-glue-api-crawler-pyspark-transforms-SplitRows.md)
+ [Classe Unbox](aws-glue-api-crawler-pyspark-transforms-Unbox.md)
+ [UnnestFrame classe](aws-glue-api-crawler-pyspark-transforms-UnnestFrame.md)

# GlueTransform classe de base
<a name="aws-glue-api-crawler-pyspark-transforms-GlueTransform"></a>

Classe de base dont toutes les classes `awsglue.transforms` héritent.

Les classes définissent toutes une méthode `__call__`. Elles remplacent les méthodes de la classe `GlueTransform` répertoriées dans les sections suivantes ou sont appelées en utilisant le nom de classe par défaut.

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-GlueTransform-_methods"></a>
+ [apply(cls, \$1args, \$1\$1kwargs)](#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply)
+ [name(cls)](#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name)
+ [describeArgs(cls)](#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs)
+ [describeReturn(cls)](#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn)
+ [describeTransform(cls)](#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform)
+ [describeErrors(cls)](#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors)
+ [describe(cls)](#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe)

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply"></a>

Applique la transformation en appelant la classe de transformation et renvoie le résultat.
+ `cls` – Objet de classe `self`.

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-GlueTransform-name"></a>

Retourne le nom de la classe de transformation dérivée.
+ `cls` – Objet de classe `self`.

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs"></a>
+ `cls` – Objet de classe `self`.

Renvoie une liste de dictionnaires, chacun correspondant à un argument nommé, dans le format suivant :

```
[
  {
    "name": "(name of argument)",
    "type": "(type of argument)",
    "description": "(description of argument)",
    "optional": "(Boolean, True if the argument is optional)",
    "defaultValue": "(Default value string, or None)(String; the default value, or None)"
  },
...
]
```

Lève une exception `NotImplementedError` en cas d'appel dans une transformation dérivée où elle n'est pas implémentée.

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn"></a>
+ `cls` – Objet de classe `self`.

Renvoie un dictionnaire avec les informations sur le type de retour, dans le format suivant :

```
{
  "type": "(return type)",
  "description": "(description of output)"
}
```

Lève une exception `NotImplementedError` en cas d'appel dans une transformation dérivée où elle n'est pas implémentée.

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform"></a>

Renvoie une chaîne décrivant la transformation.
+ `cls` – Objet de classe `self`.

Lève une exception `NotImplementedError` en cas d'appel dans une transformation dérivée où elle n'est pas implémentée.

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors"></a>
+ `cls` – Objet de classe `self`.

Renvoie une liste de dictionnaires, chacun décrivant une exception éventuelle lancée par cette transformation, dans le format suivant :

```
[
  {
    "type": "(type of error)",
    "description": "(description of error)"
  },
...
]
```

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe"></a>
+ `cls` – Objet de classe `self`.

Renvoie un objet dans le format suivant :

```
{
  "transform" : {
    "name" : cls.name( ),
    "args" : cls.describeArgs( ),
    "returns" : cls.describeReturn( ),
    "raises" : cls.describeErrors( ),
    "location" : "internal"
  }
}
```

# ApplyMapping classe
<a name="aws-glue-api-crawler-pyspark-transforms-ApplyMapping"></a>

Applique un mappage dans un `DynamicFrame`.

## Exemple
<a name="pyspark-ApplyMapping-examples"></a>

Nous vous recommandons d'utiliser le[`DynamicFrame.apply_mapping()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-apply_mapping)méthode pour appliquer un mappage dans un`DynamicFrame`. Vous trouverez un exemple de code, consultez [Exemple : Utilisez apply\$1mapping afin de renommer des champs ainsi que de modifier ses types](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-apply_mapping-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-ApplyMapping-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-ApplyMapping-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-ApplyMapping-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-ApplyMapping-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-ApplyMapping-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-ApplyMapping-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-ApplyMapping-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-ApplyMapping-describeErrors)
+ [Décrire](#aws-glue-api-crawler-pyspark-transforms-ApplyMapping-describe)

## \$1\$1call\$1\$1(frame, mappings, transformation\$1ctx = "", info = "", stageThreshold = 0, totalThreshold = 0)
<a name="aws-glue-api-crawler-pyspark-transforms-ApplyMapping-__call__"></a>

Applique un mappage déclaratif à un `DynamicFrame` spécifié.
+ `frame` – le `DynamicFrame` appliquer le mappage (obligatoire).
+ `mappings`— Une liste de tuples de mappage (obligatoire). Chacun étant composé comme suit : (colonne source, type source, colonne cible, type cible).

  Si la colonne source comporte un point »`.`« dans le nom, vous devez cocher une case arrière »````« autour de lui. Par exemple, pour mapper `this.old.name` (chaîne) à `thisNewName`, vous devez utiliser le tuple suivant :

  ```
  ("`this.old.name`", "string", "thisNewName", "string")
  ```
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée.(facultatif) La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté.(facultatif) La valeur par défaut est zéro.

Renvoie uniquement les champs du `DynamicFrame` spécifié dans les tuples de « mappage ».

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-ApplyMapping-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ApplyMapping-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ApplyMapping-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ApplyMapping-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ApplyMapping-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ApplyMapping-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ApplyMapping-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# DropFields classe
<a name="aws-glue-api-crawler-pyspark-transforms-DropFields"></a>

Déplace des champs au sein d'un `DynamicFrame`.

## Exemple
<a name="pyspark-DropFields-examples"></a>

Nous vous recommandons d'utiliser la[`DynamicFrame.drop_fields()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-drop_fields)méthode pour supprimer des champs d'un`DynamicFrame`. Vous trouverez un exemple de code, consultez [Exemple : utilisez supprimer les chams pour supprimer les champs d'un`DynamicFrame`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-drop_fields-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-DropFields-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-DropFields-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-DropFields-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-DropFields-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-DropFields-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-DropFields-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-DropFields-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-DropFields-describeErrors)
+ [Décrire](#aws-glue-api-crawler-pyspark-transforms-DropFields-describe)

## \$1\$1call\$1\$1(frame, paths, transformation\$1ctx = "", info = "", stageThreshold = 0, totalThreshold = 0)
<a name="aws-glue-api-crawler-pyspark-transforms-DropFields-__call__"></a>

Déplace des nœuds au sein d'un `DynamicFrame`.
+ `frame` – Le `DynamicFrame` dans lequel supprimer les nœuds (obligatoire).
+ `paths` – Liste des chemins complets vers les nœuds à déplacer (obligatoire).
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée.(facultatif) La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté.(facultatif) La valeur par défaut est zéro.

Renvoie un nouveau `DynamicFrame` sans les champs spécifiés.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-DropFields-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-DropFields-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-DropFields-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-DropFields-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-DropFields-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-DropFields-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-DropFields-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# DropNullFields classe
<a name="aws-glue-api-crawler-pyspark-transforms-DropNullFields"></a>

Rejette tous les champs null dans un `DynamicFrame` dont le type est `NullType`. Il s'agit des champs comportant des valeurs manquantes ou nulles dans chaque enregistrement de l'ensemble de données `DynamicFrame`.

## Exemple
<a name="pyspark-DropNullFields-examples"></a>

Cet exemple utilise `DropNullFields` pour créer un nouveau `DynamicFrame` où les champs de type `NullType` ont été abandonnés. Afin de démontrer `DropNullFields`, nous ajoutons une nouvelle colonne nommée `empty_column` de type null pour le jeu de données `persons` déjà chargé.

**Note**  
Pour accéder au jeu de données utilisé dans cet exemple, voir [Exemple de code : Données de jonction et de mise en relation](aws-glue-programming-python-samples-legislators.md) et suivez les instructions de la section[Étape 1 : analyser les données dans le compartiment Amazon S3](aws-glue-programming-python-samples-legislators.md#aws-glue-programming-python-samples-legislators-crawling).

```
# Example: Use DropNullFields to create a new DynamicFrame without NullType fields

from pyspark.context import SparkContext
from awsglue.context import GlueContext
from pyspark.sql.functions import lit
from pyspark.sql.types import NullType
from awsglue.dynamicframe import DynamicFrame
from awsglue.transforms import DropNullFields

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Create DynamicFrame
persons = glueContext.create_dynamic_frame.from_catalog(
    database="legislators", table_name="persons_json"
)
print("Schema for the persons DynamicFrame:")
persons.printSchema()

# Add new column "empty_column" with NullType
persons_with_nulls = persons.toDF().withColumn("empty_column", lit(None).cast(NullType()))
persons_with_nulls_dyf = DynamicFrame.fromDF(persons_with_nulls, glueContext, "persons_with_nulls")
print("Schema for the persons_with_nulls_dyf DynamicFrame:")
persons_with_nulls_dyf.printSchema()

# Remove the NullType field
persons_no_nulls = DropNullFields.apply(persons_with_nulls_dyf)
print("Schema for the persons_no_nulls DynamicFrame:")
persons_no_nulls.printSchema()
```

### Output
<a name="drop_null_fields-example-output"></a>

```
Schema for the persons DynamicFrame:
root
|-- family_name: string
|-- name: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- gender: string
|-- image: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
|-- sort_name: string
|-- images: array
|    |-- element: struct
|    |    |-- url: string
|-- given_name: string
|-- birth_date: string
|-- id: string
|-- contact_details: array
|    |-- element: struct
|    |    |-- type: string
|    |    |-- value: string
|-- death_date: string

Schema for the persons_with_nulls_dyf DynamicFrame:
root
|-- family_name: string
|-- name: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- gender: string
|-- image: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
|-- sort_name: string
|-- images: array
|    |-- element: struct
|    |    |-- url: string
|-- given_name: string
|-- birth_date: string
|-- id: string
|-- contact_details: array
|    |-- element: struct
|    |    |-- type: string
|    |    |-- value: string
|-- death_date: string
|-- empty_column: null

null_fields ['empty_column']
Schema for the persons_no_nulls DynamicFrame:
root
|-- family_name: string
|-- name: string
|-- links: array
|    |-- element: struct
|    |    |-- note: string
|    |    |-- url: string
|-- gender: string
|-- image: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
|-- sort_name: string
|-- images: array
|    |-- element: struct
|    |    |-- url: string
|-- given_name: string
|-- birth_date: string
|-- id: string
|-- contact_details: array
|    |-- element: struct
|    |    |-- type: string
|    |    |-- value: string
|-- death_date: string
```

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-DropNullFields-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-DropNullFields-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-DropNullFields-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-DropNullFields-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-DropNullFields-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-DropNullFields-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-DropNullFields-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-DropNullFields-describeErrors)
+ [Décrire](#aws-glue-api-crawler-pyspark-transforms-DropNullFields-describe)

## \$1\$1call\$1\$1(frame, transformation\$1ctx = "", info = "", stageThreshold = 0, totalThreshold = 0)
<a name="aws-glue-api-crawler-pyspark-transforms-DropNullFields-__call__"></a>

Rejette tous les champs null dans un `DynamicFrame` dont le type est `NullType`. Il s'agit des champs comportant des valeurs manquantes ou nulles dans chaque enregistrement de l'ensemble de données `DynamicFrame`.
+ `frame` – `DynamicFrame` dans lequel déposer les champs nuls (obligatoire).
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée.(facultatif) La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté.(facultatif) La valeur par défaut est zéro.

Renvoie un nouveau `DynamicFrame` sans champ null.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-DropNullFields-apply"></a>
+ `cls` – cls

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-DropNullFields-name"></a>
+ `cls` – cls

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-DropNullFields-describeArgs"></a>
+ `cls` – cls

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-DropNullFields-describeReturn"></a>
+ `cls` – cls

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-DropNullFields-describeTransform"></a>
+ `cls` – cls

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-DropNullFields-describeErrors"></a>
+ `cls` – cls

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-DropNullFields-describe"></a>
+ `cls` – cls

# ErrorsAsDynamicFrame classe
<a name="aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame"></a>

Renvoie un `DynamicFrame` qui contient des enregistrements imbriqués pour les erreurs survenues lors de la source `DynamicFrame` a été créé.

## Exemple
<a name="pyspark-ErrorsAsDynamicFrame-examples"></a>

Nous vous recommandons d'utiliser la [`DynamicFrame.errorsAsDynamicFrame()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-errorsAsDynamicFrame) méthode pour récupérer et afficher les enregistrements d'erreurs. Vous trouverez un exemple de code, consultez [Exemple : utilisez errorsAsDynamic Frame pour afficher les enregistrements d'erreurs](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-errorsAsDynamicFrame-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-describeErrors)
+ [Décrire](#aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-describe)

## \$1\$1call\$1\$1(frame)
<a name="aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-__call__"></a>

Renvoie un `DynamicFrame` qui contient des enregistrements d'erreurs liés au `DynamicFrame` source.
+ `frame` – `DynamicFrame` source (obligatoire).

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-apply"></a>
+ `cls` – cls

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-name"></a>
+ `cls` – cls

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-describeArgs"></a>
+ `cls` – cls

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-describeReturn"></a>
+ `cls` – cls

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-describeTransform"></a>
+ `cls` – cls

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-describeErrors"></a>
+ `cls` – cls

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ErrorsAsDynamicFrame-describe"></a>
+ `cls` – cls

# EvaluateDataQuality classe
<a name="aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality"></a>

Évalue un jeu de règles de qualité des données par rapport à un `DynamicFrame` et renvoie un nouveau `DynamicFrame` avec les résultats de l'évaluation.

## Exemple
<a name="pyspark-EvaluateDataQuality-example"></a>

L'exemple de code suivant montre comment évaluer la qualité des données pour un `DynamicFrame`, puis afficher les résultats relatifs à la qualité des données. 

```
from awsglue.transforms import *
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsgluedq.transforms import EvaluateDataQuality

#Create Glue context
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Define DynamicFrame
legislatorsAreas = glueContext.create_dynamic_frame.from_catalog(
    database="legislators", table_name="areas_json")

# Create data quality ruleset
ruleset = """Rules = [ColumnExists "id", IsComplete "id"]"""

# Evaluate data quality
dqResults = EvaluateDataQuality.apply(
    frame=legislatorsAreas,
    ruleset=ruleset,
    publishing_options={
        "dataQualityEvaluationContext": "legislatorsAreas",
        "enableDataQualityCloudWatchMetrics": True,
        "enableDataQualityResultsPublishing": True,
        "resultsS3Prefix": "amzn-s3-demo-bucket1",
    },
)


# Inspect data quality results
dqResults.printSchema()
dqResults.toDF().show()
```

### Output
<a name="pyspark-EvaluateDataQuality-example-output"></a>

```
root
|-- Rule: string
|-- Outcome: string
|-- FailureReason: string
|-- EvaluatedMetrics: map
|    |-- keyType: string
|    |-- valueType: double


+-----------------------+-------+-------------+---------------------------------------+
|Rule                   |Outcome|FailureReason|EvaluatedMetrics                       |
+-----------------------+-------+-------------+---------------------------------------+
|ColumnExists "id"      |Passed |null         |{}                                     |
|IsComplete "id"        |Passed |null         |{Column.first_name.Completeness -> 1.0}|
+-----------------------+-------+-------------+---------------------------------------+
```

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-describe)

## \$1\$1call\$1\$1 (trame, jeu de règles, options de publication = \$1\$1)
<a name="aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-__call__"></a>
+ `frame` – Le `DynamicFrame` dont vous souhaitez évaluer la qualité des données.
+ `ruleset` – Jeu de règles DQDL (Data Quality Definition Language) au format de chaîne. Pour en savoir plus sur DQDL, consultez le guide [Référence DQDL (Data Quality Definition Language)](dqdl.md).
+ `publishing_options` – Dictionnaire qui spécifie les options de publication suivantes des résultats et des métriques d'une évaluation :
  + `dataQualityEvaluationContext`— Chaîne qui indique l'espace de noms sous lequel AWS Glue doit publier Amazon CloudWatch les métriques et les résultats de qualité des données. Les statistiques agrégées apparaissent dans CloudWatch, tandis que les résultats complets apparaissent dans l'interface de AWS Glue Studio.
    + Obligatoire : non
    + Valeur par défaut : `default_context`
  + `enableDataQualityCloudWatchMetrics`— Spécifie si les résultats de l'évaluation de la qualité des données doivent être publiés sur CloudWatch. Vous spécifiez un espace de noms pour les métriques à l'aide de l'option `dataQualityEvaluationContext`.
    + Obligatoire : non
    + Valeur par défaut : False
  + `enableDataQualityResultsPublishing` – Spécifie si les résultats relatifs à la qualité des données doivent être visibles dans l'onglet **Data Quality** (Qualité des données) de l'interface AWS Glue Studio.
    + Obligatoire : non
    + Valeur par défaut : True
  + `resultsS3Prefix`— Spécifie l'emplacement Amazon S3 où AWS Glue peut écrire les résultats de l'évaluation de la qualité des données.
    + Obligatoire : non
    + Valeur par défaut : "" (chaîne vide)

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# FillMissingValues classe
<a name="aws-glue-api-crawler-pyspark-transforms-fillmissingvalues"></a>

La classe `FillMissingValues` localise les valeurs nulles et les chaînes vides dans un élément `DynamicFrame` spécifié et utilise des méthodes de machine learning, telles que la régression linéaire et la forêt aléatoire, pour prédire les valeurs manquantes. La tâche ETL utilise les valeurs de l'ensemble de données d'entrée pour entraîner le modèle de machine learning, qui prédit ensuite quelles devraient être les valeurs manquantes.

**Astuce**  
Si vous utilisez des jeux de données incrémentiels, chacun d'entre eux est utilisé comme données d'entraînement pour le modèle de machine learning, de sorte que les résultats peuvent ne pas être aussi précis.

Pour importer :

```
from awsglueml.transforms import FillMissingValues
```

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-fillmissingvalues-_methods"></a>
+ [Appliquer](#aws-glue-api-crawler-pyspark-transforms-fillmissingvalues-apply)

## apply(frame, missing\$1values\$1column, output\$1column ="", transformation\$1ctx ="", info ="", stageThreshold = 0, totalThreshold = 0)
<a name="aws-glue-api-crawler-pyspark-transforms-fillmissingvalues-apply"></a>

Remplit les valeurs manquantes d'un cadre dynamique dans une colonne spécifiée et renvoie un nouveau cadre avec des estimations dans une nouvelle colonne. Pour les lignes sans valeurs manquantes, la valeur de la colonne spécifiée est dupliquée dans la nouvelle colonne.
+ `frame` – `DynamicFrame` dans lequel renseigner les valeurs manquantes. Obligatoire.
+ `missing_values_column` – colonne contenant les valeurs manquantes (valeurs `null` et chaînes vides). Obligatoire.
+ `output_column` – nom de la nouvelle colonne qui contiendra les valeurs estimées pour toutes les lignes dont la valeur était manquante. Facultatif ; la valeur par défaut est le nom de `missing_values_column` avec le suffixe `"_filled"`.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – Nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée (facultatif ; la valeur par défaut est zéro).
+ `totalThreshold` – Nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté (facultatif ; la valeur par défaut est zéro).

Renvoie un nouveau `DynamicFrame` avec une colonne supplémentaire qui contient des estimations pour les lignes avec des valeurs manquantes et la valeur actuelle pour les autres lignes.

# Classe Filter
<a name="aws-glue-api-crawler-pyspark-transforms-filter"></a>

Construit un nouvel `DynamicFrame` contenant des enrégistrements en entrée `DynamicFrame` qui satisfont à une fonction de prédicat spécifié 

## Exemple
<a name="aws-glue-api-crawler-pyspark-transforms-filter-example"></a>

Nous vous recommandons d'utiliser la [`DynamicFrame.filter()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-filter) méthode pour supprimer des champs d'un `DynamicFrame`. Vous trouverez un exemple de code, consultez [Exemple  : Utiliser un filtre pour obtenir une sélection de champs filtrée](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-filter-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-filter-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-filter-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-filter-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-filter-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-filter-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-filter-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-filter-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-filter-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-filter-describe)

## \$1\$1call\$1\$1(frame, f, transformation\$1ctx="", info="", stageThreshold=0, totalThreshold=0))
<a name="aws-glue-api-crawler-pyspark-transforms-filter-__call__"></a>

Retourne un nouvel objet `DynamicFrame` construit en sélectionnant les enregistrements en entrée `DynamicFrame` qui satisfont à une fonction de prédicat spécifiée.
+ `frame` – Objet `DynamicFrame` source auquel appliquer la fonction de filtre spécifiée (requis).
+ `f` – fonction de prédicat à appliquer à chaque `DynamicRecord` de l'objet `DynamicFrame`. La fonction doit accepter un `DynamicRecord` comme argument et renvoyer la valeur Vraie si le `DynamicRecord` répond aux critères du filtre, ou la valeur Faux dans le cas contraire (obligatoire).

  Un `DynamicRecord` représente un enregistrement logique dans un `DynamicFrame`. Il est comparable à une ligne dans un Spark `DataFrame`, à la différence qu'il est auto-descriptif et peut être utilisé pour les données qui ne sont pas conformes à un schéma fixe.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée.(facultatif) La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté.(facultatif) La valeur par défaut est zéro.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-filter-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-filter-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-filter-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-filter-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-filter-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-filter-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-filter-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# FindIncrementalMatches classe
<a name="aws-glue-api-crawler-pyspark-transforms-findincrementalmatches"></a>

Identifie les enregistrements correspondants dans les `DynamicFrame` existants et incrémentiels, et crée un `DynamicFrame` avec un identifiant unique affecté à chaque groupe d'enregistrements correspondants.

Pour importer :

```
from awsglueml.transforms import FindIncrementalMatches
```

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-findincrementalmatches-_methods"></a>
+ [Appliquer](#aws-glue-api-crawler-pyspark-transforms-findincrementalmatches-apply)

## appliquer (ExistingFrame, IncrementalFrame, TransformId, transformation\$1ctx = « », info = « », StageThreshold = 0, TotalThreshold = 0, EnforcedMatches = aucun, Scores = 0) computeMatchConfidence
<a name="aws-glue-api-crawler-pyspark-transforms-findincrementalmatches-apply"></a>

Identifie les enregistrements correspondants dans l'entrée `DynamicFrame`, et crée un `DynamicFrame` avec un identifiant unique affecté à chaque groupe d'enregistrements correspondants.
+ `existingFrame`— L'existant et le préapparié `DynamicFrame` pour appliquer la FindIncrementalMatches transformation. Obligatoire.
+ `incrementalFrame`— L'incrémentiel `DynamicFrame` à appliquer à la FindIncrementalMatches transformation pour qu'elle corresponde `existingFrame` à. Obligatoire.
+ `transformId`— L'identifiant unique associé à la FindIncrementalMatches transformation à appliquer aux enregistrements du`DynamicFrames`. Obligatoire.
+ `transformation_ctx`— Chaîne unique utilisée pour identifier les stats/state informations. Facultatif.
+ `info` – chaîne à associer à des erreurs dans la transformation. Facultatif.
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée. Facultatif. La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté. Facultatif. La valeur par défaut est zéro.
+ `enforcedMatches` – `DynamicFrame` utilisé pour appliquer les correspondances. Facultatif. La valeur par défaut est Aucun.
+ `computeMatchConfidenceScores` – Valeur booléenne indiquant s'il faut calculer un score de confiance pour chaque groupe de registres correspondant. Facultatif. La valeur par défaut est false.

Renvoie un nouveau `DynamicFrame` avec un identifiant unique affecté à chaque groupe d'enregistrements correspondants.

# FindMatches classe
<a name="aws-glue-api-crawler-pyspark-transforms-findmatches"></a>

Identifie les enregistrements correspondants dans l'entrée `DynamicFrame`, et crée un `DynamicFrame` avec un identifiant unique affecté à chaque groupe d'enregistrements correspondants.

Pour importer :

```
from awsglueml.transforms import FindMatches
```

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-findmatches-_methods"></a>
+ [Appliquer](#aws-glue-api-crawler-pyspark-transforms-findmatches-apply)

## appliquer (frame, TransformId, transformation\$1ctx = « », info = « », StageThreshold = 0, TotalThreshold = 0, EnforcedMatches = aucun, Scores = 0) computeMatchConfidence
<a name="aws-glue-api-crawler-pyspark-transforms-findmatches-apply"></a>

Identifie les enregistrements correspondants dans l'entrée `DynamicFrame`, et crée un `DynamicFrame` avec un identifiant unique affecté à chaque groupe d'enregistrements correspondants.
+ `frame`— Le `DynamicFrame` pour appliquer la FindMatches transformation. Obligatoire.
+ `transformId`— L'identifiant unique associé à la FindMatches transformation à appliquer aux enregistrements du`DynamicFrame`. Obligatoire.
+ `transformation_ctx`— Chaîne unique utilisée pour identifier les stats/state informations. Facultatif.
+ `info` – chaîne à associer à des erreurs dans la transformation. Facultatif.
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée. Facultatif. La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté. Facultatif. La valeur par défaut est zéro.
+ `enforcedMatches` – `DynamicFrame` utilisé pour appliquer les correspondances. Facultatif. La valeur par défaut est Aucun.
+ `computeMatchConfidenceScores` – Valeur booléenne indiquant s'il faut calculer un score de confiance pour chaque groupe de registres correspondant. Facultatif. La valeur par défaut est false.

Renvoie un nouveau `DynamicFrame` avec un identifiant unique affecté à chaque groupe d'enregistrements correspondants.

# FlatMap classe
<a name="aws-glue-api-crawler-pyspark-transforms-flat-map"></a>

 Applique une transformation à chaque `DynamicFrame` d'une collection. Les résultats ne sont pas aplatis en un seul `DynamicFrame`, mais conservés sous forme de collection. 

## Exemples pour FlatMap
<a name="aws-glue-api-crawler-pyspark-flat-map-examples"></a>

 L'exemple d'extrait suivant montre comment utiliser la transformation `ResolveChoice` sur une collection de cadres dynamiques lorsqu'elle est appliquée à un `FlatMap`. Les données utilisées pour l'entrée se trouvent dans le JSON situé à l'adresse Amazon S3 de l'espace réservé `s3://bucket/path-for-data/sample.json` et contiennent les données suivantes. 

### Exemple de données JSON
<a name="aws-glue-api-crawler-pyspark-flat-map-examples-json"></a>

```
[{
    "firstname": "Arnav",
    "lastname": "Desai",
    "address": {
        "street": "6 Anyroad Avenue",
        "city": "London",
        "state": "England",
        "country": "UK"
    },
    "phone": 17235550101,
    "affiliations": [
        "General Anonymous Example Products",
        "Example Independent Research",
        "Government Department of Examples"
    ]
},
{
    "firstname": "Mary",
    "lastname": "Major",
    "address": {
        "street": "7821 Spot Place",
        "city": "Centerville",
        "state": "OK",
        "country": "US"
    },
    "phone": 19185550023,
    "affiliations": [
        "Example Dot Com",
        "Example Independent Research",
        "Example.io"
    ]
},
{
    "firstname": "Paulo",
    "lastname": "Santos",
    "address": {
        "street": "123 Maple Street",
        "city": "London",
        "state": "Ontario",
        "country": "CA"
    },
    "phone": 12175550181,
    "affiliations": [
        "General Anonymous Example Products",
        "Example Dot Com"
    ]
}]
```

**Example Appliquer ResolveChoice à une sortie DynamicFrameCollection et afficher.**  

```
#Read DynamicFrame
datasource = glueContext.create_dynamic_frame_from_options("s3", connection_options = {"paths":["s3://bucket/path/to/file/mysamplejson.json"]}, format="json")
datasource.printSchema()
datasource.show()

## Split to create a DynamicFrameCollection
split_frame=datasource.split_fields(["firstname","lastname","address"],"personal_info","business_info")
split_frame.keys()
print("---")

## Use FlatMap to run ResolveChoice
kwargs = {"choice": "cast:string"}
flat = FlatMap.apply(split_frame, ResolveChoice, frame_name="frame", transformation_ctx='tcx', **kwargs)
flat.keys()

##Select one of the DynamicFrames
personal_info = flat.select("personal_info")
personal_info.printSchema()
personal_info.show()
print("---")

business_info = flat.select("business_info")
business_info.printSchema()
business_info.show()
```
 Lorsque vous appelez `FlatMap.apply`, le paramètre `frame_name` **doit** être `"frame"`. Aucune autre valeur n'est actuellement acceptée. 

### Exemple de sortie
<a name="aws-glue-api-crawler-pyspark-flat-map-examples"></a>

```
root
|-- firstname: string
|-- lastname: string
|-- address: struct
|    |-- street: string
|    |-- city: string
|    |-- state: string
|    |-- country: string
|-- phone: long
|-- affiliations: array
|    |-- element: string
---
{
    "firstname": "Mary",
    "lastname": "Major",
    "address": {
        "street": "7821 Spot Place",
        "city": "Centerville",
        "state": "OK",
        "country": "US"
    },
    "phone": 19185550023,
    "affiliations": [
        "Example Dot Com",
        "Example Independent Research",
        "Example.io"
    ]
}

{
    "firstname": "Paulo",
    "lastname": "Santos",
    "address": {
        "street": "123 Maple Street",
        "city": "London",
        "state": "Ontario",
        "country": "CA"
    },
    "phone": 12175550181,
    "affiliations": [
        "General Anonymous Example Products",
        "Example Dot Com"
    ]
}
---
root
|-- firstname: string
|-- lastname: string
|-- address: struct
|    |-- street: string
|    |-- city: string
|    |-- state: string
|    |-- country: string

{
    "firstname": "Mary",
    "lastname": "Major",
    "address": {
        "street": "7821 Spot Place",
        "city": "Centerville",
        "state": "OK",
        "country": "US"
    }
}

{
    "firstname": "Paulo",
    "lastname": "Santos",
    "address": {
        "street": "123 Maple Street",
        "city": "London",
        "state": "Ontario",
        "country": "CA"
    }
}
---
root
|-- phone: long
|-- affiliations: array
|    |-- element: string

{
    "phone": 19185550023,
    "affiliations": [
        "Example Dot Com",
        "Example Independent Research",
        "Example.io"
    ]
}

{
    "phone": 12175550181,
    "affiliations": [
        "General Anonymous Example Products",
        "Example Dot Com"
    ]
}
```

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-flat-map-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-flat-map-__call__)
+ [Appliquer](#aws-glue-api-crawler-pyspark-transforms-flat-map-apply)
+ [Name](#aws-glue-api-crawler-pyspark-transforms-flat-map-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-flat-map-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-flat-map-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-flat-map-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-flat-map-describeErrors)
+ [Décrire](#aws-glue-api-crawler-pyspark-transforms-flat-map-describe)

## \$1\$1call\$1\$1 (dfc, nom\$1cadre BaseTransform, transformation\$1ctx = « », \$1\$1base\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-flat-map-__call__"></a>

Applique une transformation à chaque `DynamicFrame` d'une collection et aplatit les résultats.
+ `dfc` – `DynamicFrameCollection` sur lequel effectuer un flatmap (obligatoire).
+ `BaseTransform` – Transformation dérivée de `GlueTransform` à appliquer à chaque membre de la collection (obligatoire).
+ `frame_name` – Nom de l'argument auquel transmettre les éléments de la collection (obligatoire).
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `base_kwargs` – Arguments à transmettre à la transformation de base (obligatoire).

Retourne un nouvel objet `DynamicFrameCollection` en appliquant la transformation à chaque `DynamicFrame` de l'objet `DynamicFrameCollection` source.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-flat-map-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-flat-map-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-flat-map-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-flat-map-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-flat-map-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-flat-map-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-flat-map-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# Classe Join
<a name="aws-glue-api-crawler-pyspark-transforms-join"></a>

Effectue une jointure d'égalité sur deux `DynamicFrames`.

## Exemple
<a name="pyspark-Join-example"></a>

Nous vous recommandons d'utiliser la [`DynamicFrame.join()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-join) méthode pour joindre `DynamicFrames`. Vous trouverez un exemple de code, consultez [Exemple : Utiliser la jointure pour combiner`DynamicFrames`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-join-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-join-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-join-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-join-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-join-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-join-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-join-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-join-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-join-describeErrors)
+ [Décrire](#aws-glue-api-crawler-pyspark-transforms-join-describe)

## \$1\$1call\$1\$1(frame1, frame2, keys1, keys2, transformation\$1ctx = "")
<a name="aws-glue-api-crawler-pyspark-transforms-join-__call__"></a>

Effectue une jointure d'égalité sur deux `DynamicFrames`.
+ `frame1` – Premier `DynamicFrame` à joindre (obligatoire).
+ `frame2` – Second `DynamicFrame` à joindre (obligatoire).
+ `keys1` – Clés à joindre pour la première trame (obligatoire).
+ `keys2` – Clés à joindre pour la seconde trame (obligatoire).
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).

Renvoie un nouveau `DynamicFrame` qui est créé en joignant les deux `DynamicFrames`.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-join-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-join-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-join-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-join-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-join-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-join-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-join-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# Classe Map
<a name="aws-glue-api-crawler-pyspark-transforms-map"></a>

Crée un nouvel objet `DynamicFrame` en appliquant une fonction à tous les objets `DynamicFrame` en entrée.

## Exemple
<a name="aws-glue-api-crawler-pyspark-transforms-map-examples"></a>

Nous vous recommandons d'utiliser le [`DynamicFrame.map()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-map) méthode pour appliquer une fonction à tous les enrégistrements dans `DynamicFrame`. Vous trouverez un exemple de code, consultez [Exemple : utilisez la carte pour appliquer une fonction à chaque enregistrement dans un `DynamicFrame`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-map-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-map-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-map-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-map-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-map-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-map-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-map-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-map-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-map-describeErrors)
+ [Décrire](#aws-glue-api-crawler-pyspark-transforms-map-describe)

## \$1\$1call\$1\$1(frame, f, transformation\$1ctx="", info="", stageThreshold=0, totalThreshold=0)
<a name="aws-glue-api-crawler-pyspark-transforms-map-__call__"></a>

Renvoie un nouvel objet `DynamicFrame` qui résulte de l'application de la fonction spécifiée à tous les `DynamicRecords` de l'objet `DynamicFrame` d'origine.
+ `frame` – Objet `DynamicFrame` d'origine auquel appliquer la fonction de mappage (obligatoire).
+ `f` – fonction à tous les `DynamicRecords` de l'objet `DynamicFrame`. La fonction doit accepter un `DynamicRecord` comme argument et renvoyer un nouvel objet `DynamicRecord` produit par le mappage (obligatoire).

  Un `DynamicRecord` représente un enregistrement logique dans un `DynamicFrame`. Il est comparable à une ligne dans un `DataFrame` Apache Spark, à la différence qu'il est auto-descriptif et peut être utilisé pour les données qui ne sont pas conformes à un schéma fixe.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée.(facultatif) La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté.(facultatif) La valeur par défaut est zéro.

Renvoie un nouvel objet `DynamicFrame` qui résulte de l'application de la fonction spécifiée à tous les `DynamicRecords` de l'objet `DynamicFrame` d'origine.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-map-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-map-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-map-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-map-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-map-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-map-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-map-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# MapToCollection classe
<a name="aws-glue-api-crawler-pyspark-transforms-MapToCollection"></a>

Applique une transformation à chaque `DynamicFrame` de l'objet `DynamicFrameCollection` spécifié.

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-MapToCollection-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-MapToCollection-__call__)
+ [Appliquer](#aws-glue-api-crawler-pyspark-transforms-MapToCollection-apply)
+ [Name](#aws-glue-api-crawler-pyspark-transforms-MapToCollection-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-MapToCollection-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-MapToCollection-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-MapToCollection-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-MapToCollection-describeErrors)
+ [Décrire](#aws-glue-api-crawler-pyspark-transforms-MapToCollection-describe)

## \$1\$1call\$1\$1 (dfc, nom\$1cadre BaseTransform, transformation\$1ctx = « », \$1\$1base\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-MapToCollection-__call__"></a>

Applique une fonction de transformation à chaque `DynamicFrame` de l'objet `DynamicFrameCollection` spécifié.
+ `dfc` – L'objet `DynamicFrameCollection` sur lequel appliquer la fonction de transformation (requise).
+ `callable` – Une fonction de transformation appelable à appliquer à chaque membre de la collection (obligatoire).
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).

Retourne un nouvel objet `DynamicFrameCollection` en appliquant la transformation à chaque `DynamicFrame` de l'objet `DynamicFrameCollection` source.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-MapToCollection-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply)

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-MapToCollection-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-MapToCollection-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-MapToCollection-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-MapToCollection-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-MapToCollection-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-MapToCollection-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# Classe Relationalize
<a name="aws-glue-api-crawler-pyspark-transforms-Relationalize"></a>

Aplatit le schéma imbriqué dans une image `DynamicFrame` et fait pivoter les colonnes de tableaux de l'image aplatie.

## Exemple
<a name="pyspark-Relationalize-example"></a>

Nous vous recommandons d'utiliser la méthode [`DynamicFrame.relationalize()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-relationalize) pour mettre en relation une image `DynamicFrame`. Vous trouverez un exemple de code, consultez [Exemple : utiliser la méthode relationalize pour aplatir un schéma imbriqué dans une image `DynamicFrame`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-relationalize-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-Relationalize-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-Relationalize-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-Relationalize-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-Relationalize-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-Relationalize-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-Relationalize-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-Relationalize-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-Relationalize-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-Relationalize-describe)

## \$1\$1call\$1\$1(frame, staging\$1path=None, name='roottable', options=None, transformation\$1ctx = "", info = "", stageThreshold = 0, totalThreshold = 0)
<a name="aws-glue-api-crawler-pyspark-transforms-Relationalize-__call__"></a>

Met en relation un `DynamicFrame` et produit une liste des trames qui sont générées en supprimant l'imbrication des colonnes imbriquées et en faisant pivoter des colonnes de tableaux. Vous pouvez joindre une colonne de tableau ayant été pivotée à la table racine à l'aide de la clé de jointure générée au cours de la phase de désimbrication.
+ `frame` – `DynamicFrame` à mettre en relation (obligatoire).
+ `staging_path` – Chemin d'accès auquel la méthode peut stocker des partitions des tables dynamiques au format CSV format (facultatif). Les tables dynamiques sont lues à partir de ce chemin.
+ `name` – Nom de la table racine (facultatif).
+ `options` – Dictionnaire des paramètres facultatifs. Non utilisé actuellement. 
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée.(facultatif) La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté.(facultatif) La valeur par défaut est zéro.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-Relationalize-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Relationalize-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Relationalize-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Relationalize-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Relationalize-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Relationalize-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Relationalize-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# RenameField classe
<a name="aws-glue-api-crawler-pyspark-transforms-RenameField"></a>

Renomme un nœud dans un `DynamicFrame`.

## Exemple
<a name="pyspark-RenameField-example"></a>

Nous vous recommandons d'utiliser la méthode [`DynamicFrame.rename_field()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-rename_field) pour renommer un champ dans une image `DynamicFrame`. Vous trouverez un exemple de code, consultez [Exemple : utiliser la méthode rename\$1field pour renommer des champs dans une image `DynamicFrame`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-rename_field-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-RenameField-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-RenameField-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-RenameField-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-RenameField-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-RenameField-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-RenameField-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-RenameField-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-RenameField-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-RenameField-describe)

## \$1\$1call\$1\$1(frame, old\$1name, new\$1name, transformation\$1ctx = "", info = "", stageThreshold = 0, totalThreshold = 0)
<a name="aws-glue-api-crawler-pyspark-transforms-RenameField-__call__"></a>

Renomme un nœud dans un `DynamicFrame`.
+ `frame` – `DynamicFrame` dans lequel renommer un nœud (obligatoire).
+ `old_name` – Chemin d'accès complet au nœud à renommer (obligatoire).

  Si l'ancien nom comporte des points, cela ne RenameField fonctionnera pas à moins que vous ne le contourniez (````). Par exemple, pour remplacer `this.old.name` par`thisNewName`, vous devez appeler RenameField comme suit :

  ```
  newDyF = RenameField(oldDyF, "`this.old.name`", "thisNewName")
  ```
+ `new_name` – Nouveau nom, y compris le chemin d'accès complet (obligatoire).
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée.(facultatif) La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté.(facultatif) La valeur par défaut est zéro.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-RenameField-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-RenameField-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-RenameField-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-RenameField-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-RenameField-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-RenameField-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-RenameField-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# ResolveChoice classe
<a name="aws-glue-api-crawler-pyspark-transforms-ResolveChoice"></a>

Résout un type de choix au sein d'un `DynamicFrame`.

## Exemple
<a name="pyspark-ResolveChoice-example"></a>

Nous vous recommandons d'utiliser la méthode [`DynamicFrame.resolveChoice()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-resolveChoice) pour gérer les champs contenant plusieurs types dans une image `DynamicFrame`. Vous trouverez un exemple de code, consultez [Exemple : utiliser la méthode resolveChoice pour gérer une colonne contenant plusieurs types](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-resolveChoice-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-ResolveChoice-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-ResolveChoice-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-ResolveChoice-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-ResolveChoice-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-ResolveChoice-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-ResolveChoice-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-ResolveChoice-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-ResolveChoice-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-ResolveChoice-describe)

## \$1\$1call\$1\$1(frame, specs = None, choice = "", transformation\$1ctx = "", info = "", stageThreshold = 0, totalThreshold = 0)
<a name="aws-glue-api-crawler-pyspark-transforms-ResolveChoice-__call__"></a>

Fournit des informations pour résoudre les types ambigus au sein d'un `DynamicFrame`. Renvoie l'image `DynamicFrame` obtenue.
+ `frame` – `DynamicFrame` dans lequel résoudre le type de choix (obligatoire).
+ `specs` – Liste d'ambiguïtés spécifiques à résoudre, apparaissant sous forme de tuple:`(path, action)`. La valeur `path` identifie un élément ambigu spécifique, et la valeur `action` identifie la résolution correspondante. 

  Vous ne pouvez utiliser qu'un seul des paramètres `spec` et `choice`. Si le paramètre `spec` n'est pas `None`, alors le paramètre `choice` doit être une chaîne vide. Inversement, si le paramètre `choice` n'est pas une chaîne vide, alors le paramètre `spec` doit être `None`. Si aucun paramètre n'est fourni, AWS Glue essaie d'analyser le schéma et de l'utiliser pour résoudre les ambiguïtés. 

  Vous pouvez spécifier l'une des stratégies de résolution suivantes dans la portion `action` d'un tuple `specs` :
  + `cast` – Vous permet de spécifier un type pour la conversion (par exemple, `cast:int`).
  + `make_cols` – Résout une ambiguïté potentielle en aplatissant les données. Par exemple, si `columnA` peut être un `int` ou un `string`, la résolution doit produire deux colonnes nommées `columnA_int` et `columnA_string` dans le `DynamicFrame` obtenu.
  + `make_struct` – Résout une ambiguïté potentielle en utilisant un champ struct pour représenter les données. Par exemple, si des données d'une colonne peuvent être un `int` ou un `string`, l'action `make_struct` produit une colonne de structures dans le `DynamicFrame` obtenu, chacune contenant à la fois un `int` et un `string`.
  + `project` – Résout une éventuelle ambiguïté en conservant uniquement les valeurs d'un type spécifié dans l'image `DynamicFrame` obtenue. Par exemple, si les données d'une colonne `ChoiceType` peuvent être de type `int` ou `string`, la spécification d'une action `project:string` supprime des valeurs de l'image `DynamicFrame` obtenue qui ne sont pas de type `string`. 

  Si le `path` identifie un tableau, placez des crochets vides après le nom du tableau pour éviter toute ambiguïté. Par exemple, supposons que vous travailliez avec les données structurées comme suit :

  ```
  "myList": [
    { "price": 100.00 },
    { "price": "$100.00" }
  ]
  ```

  Vous pouvez sélectionner la version numérique plutôt que la version chaîne du prix en définissant `path` sur `"myList[].price"` et `action` sur `"cast:double"`.
+ `choice` – action de résolution par défaut si le paramètre `specs` est `None`. Si le paramètre `specs` n'est pas `None`, alors la seule valeur définie doit être une chaîne vide.

  En plus des actions `specs` répertoriées précédemment, cet argument prend également en charge l'action suivante :
  + `MATCH_CATALOG` – tente de convertir chaque `ChoiceType` dans le type correspondant de table Data Catalog spécifiée.
+ `database`— La base de données AWS Glue Data Catalog à utiliser avec le `MATCH_CATALOG` choix (obligatoire pour`MATCH_CATALOG`).
+ `table_name`— Le nom de la table AWS Glue Data Catalog à utiliser avec l'`MATCH_CATALOG`action (obligatoire pour`MATCH_CATALOG`).
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée.(facultatif) La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté.(facultatif) La valeur par défaut est zéro.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-ResolveChoice-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ResolveChoice-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ResolveChoice-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ResolveChoice-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ResolveChoice-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ResolveChoice-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-ResolveChoice-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# SelectFields classe
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFields"></a>

`SelectFields`La classe crée une nouvelle`DynamicFrame`à partir d'un`DynamicFrame`, et ne conserve que les champs que vous spécifiez.`SelectFields`fournit des fonctionnalités similaires à celles d'un SQL`SELECT`instructions.

## Exemple
<a name="pyspark-SelectFields-examples"></a>

Nous vous recommandons d'utiliser la[`DynamicFrame.select_fields()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-select_fields)méthode pour sélectionner des champs d'un`DynamicFrame`. Vous trouverez un exemple de code, consultez [Exemple : utilisez select\$1fields pour créer un nouveau `DynamicFrame` avec les champs sélectionnés](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-select_fields-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFields-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-SelectFields-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-SelectFields-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-SelectFields-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-SelectFields-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-SelectFields-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-SelectFields-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-SelectFields-describeErrors)
+ [Décrire](#aws-glue-api-crawler-pyspark-transforms-SelectFields-describe)

## \$1\$1call\$1\$1(frame, paths, transformation\$1ctx = "", info = "", stageThreshold = 0, totalThreshold = 0)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFields-__call__"></a>

Obtient les champs (nœuds) d'un `DynamicFrame`.
+ `frame` – Objet `DynamicFrame` dans lequel sélectionner les champs (requis).
+ `paths` – Liste des chemins complets vers les champs à sélectionner (obligatoire).
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée.(facultatif) La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté.(facultatif) La valeur par défaut est zéro.

Renvoie un nouvel objet `DynamicFrame` contenant uniquement les champs spécifiés.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFields-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFields-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFields-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFields-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFields-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFields-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFields-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# SelectFromCollection classe
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFromCollection"></a>

Sélectionne un `DynamicFrame` dans un `DynamicFrameCollection`.

## Exemple
<a name="pyspark-SelectFromCollection-example"></a>

Cet exemple utilise `SelectFromCollection` pour sélectionner une image `DynamicFrame` dans une collection `DynamicFrameCollection`.

**Exemple de jeu de données**

L'exemple sélectionne deux images `DynamicFrames` d'une collection `DynamicFrameCollection` appelée `split_rows_collection`. Vous trouverez ci-dessous la liste des clés de la collection `split_rows_collection`.

```
dict_keys(['high', 'low'])
```

**Exemple de code**

```
# Example: Use SelectFromCollection to select
# DynamicFrames from a DynamicFrameCollection

from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.transforms import SelectFromCollection

# Create GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

# Select frames and inspect entries
frame_low = SelectFromCollection.apply(dfc=split_rows_collection, key="low")
frame_low.toDF().show()

frame_high = SelectFromCollection.apply(dfc=split_rows_collection, key="high")
frame_high.toDF().show()
```

### Output
<a name="SelectFromCollection-example-output"></a>

```
+---+-----+------------------------+-------------------------+
| id|index|contact_details.val.type|contact_details.val.value|
+---+-----+------------------------+-------------------------+
|  1|    0|                     fax|             202-225-3307|
|  1|    1|                   phone|             202-225-5731|
|  2|    0|                     fax|             202-225-3307|
|  2|    1|                   phone|             202-225-5731|
|  3|    0|                     fax|             202-225-3307|
|  3|    1|                   phone|             202-225-5731|
|  4|    0|                     fax|             202-225-3307|
|  4|    1|                   phone|             202-225-5731|
|  5|    0|                     fax|             202-225-3307|
|  5|    1|                   phone|             202-225-5731|
|  6|    0|                     fax|             202-225-3307|
|  6|    1|                   phone|             202-225-5731|
|  7|    0|                     fax|             202-225-3307|
|  7|    1|                   phone|             202-225-5731|
|  8|    0|                     fax|             202-225-3307|
|  8|    1|                   phone|             202-225-5731|
|  9|    0|                     fax|             202-225-3307|
|  9|    1|                   phone|             202-225-5731|
| 10|    0|                     fax|             202-225-6328|
| 10|    1|                   phone|             202-225-4576|
+---+-----+------------------------+-------------------------+
only showing top 20 rows

+---+-----+------------------------+-------------------------+
| id|index|contact_details.val.type|contact_details.val.value|
+---+-----+------------------------+-------------------------+
| 11|    0|                     fax|             202-225-6328|
| 11|    1|                   phone|             202-225-4576|
| 11|    2|                 twitter|           RepTrentFranks|
| 12|    0|                     fax|             202-225-6328|
| 12|    1|                   phone|             202-225-4576|
| 12|    2|                 twitter|           RepTrentFranks|
| 13|    0|                     fax|             202-225-6328|
| 13|    1|                   phone|             202-225-4576|
| 13|    2|                 twitter|           RepTrentFranks|
| 14|    0|                     fax|             202-225-6328|
| 14|    1|                   phone|             202-225-4576|
| 14|    2|                 twitter|           RepTrentFranks|
| 15|    0|                     fax|             202-225-6328|
| 15|    1|                   phone|             202-225-4576|
| 15|    2|                 twitter|           RepTrentFranks|
| 16|    0|                     fax|             202-225-6328|
| 16|    1|                   phone|             202-225-4576|
| 16|    2|                 twitter|           RepTrentFranks|
| 17|    0|                     fax|             202-225-6328|
| 17|    1|                   phone|             202-225-4576|
+---+-----+------------------------+-------------------------+
only showing top 20 rows
```

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-describe)

## \$1\$1call\$1\$1(dfc, key, transformation\$1ctx = "")
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-__call__"></a>

Obtient un `DynamicFrame` d'un `DynamicFrameCollection`.
+ `dfc` – Collection `DynamicFrameCollection` à partir de laquelle l'image `DynamicFrame` doit être sélectionnée (obligatoire).
+ `key` – Clé du `DynamicFrame` à sélectionner (obligatoire).
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SelectFromCollection-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# Classe Simplify\$1ddb\$1json
<a name="aws-glue-api-crawler-pyspark-transforms-simplify-ddb-json"></a>

Simplifie les colonnes imbriquées dans un `DynamicFrame` qui se trouvent spécifiquement dans la structure JSON DynamoDB, et renvoie une nouvelle version simplifiée du `DynamicFrame`.

## Exemple
<a name="pyspark-simplify-ddb-json-examples"></a>

Nous vous recommandons d’utiliser la méthode `DynamicFrame.simplify_ddb_json()` pour simplifier les colonnes imbriquées dans un `DynamicFrame` qui se trouvent spécifiquement dans la structure JSON DynamoDB. Vous trouverez un exemple de code, consultez [Exemple : utilisez simplify\$1ddb\$1json pour invoquer une simplification JSON DynamoDB.](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-simplify-ddb-json-example).

# Classe Spigot
<a name="aws-glue-api-crawler-pyspark-transforms-spigot"></a>

Écrit des exemples d'enregistrement sur une destination spécifiée pour vous aider à vérifier les transformations effectuées par votre tâche AWS Glue.

## Exemple
<a name="pyspark-spigot-examples"></a>

Nous vous recommandons d'utiliser la méthode [`DynamicFrame.spigot()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-spigot) pour écrire un sous-ensemble d'enregistrements depuis une image `DynamicFrame` vers une destination spécifiée. Vous trouverez un exemple de code, consultez [Exemple : utiliser la méthode spigot pour écrire des exemples de champs d'une image `DynamicFrame` vers Amazon S3](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-spigot-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-spigot-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-spigot-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-spigot-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-spigot-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-spigot-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-spigot-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-spigot-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-spigot-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-spigot-describe)

## \$1\$1call\$1\$1(trame, chemin, options, transformation\$1ctx = "")
<a name="aws-glue-api-crawler-pyspark-transforms-spigot-__call__"></a>

Écrit des exemples d'enregistrements sur une destination spécifiée au cours d'une transformation.
+ `frame` - `DynamicFrame` sur lequel effectuer le spigot (requis).
+ `path` – Chemin d'accès de la destination sur laquelle écrire (obligatoire).
+ `options` – Paires clé-valeur JSON spécifiant des options (facultatif). L'option `"topk"` indique que les premiers enregistrements *k* doivent être écrits. L'option `"prob"` indique la probabilité (sous forme de décimale) de sélectionner un enregistrement donné. Utilisée pour sélectionner les enregistrements à écrire.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-spigot-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply)

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-spigot-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name)

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-spigot-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs)

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-spigot-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn)

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-spigot-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform)

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-spigot-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors)

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-spigot-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe)

# SplitFields classe
<a name="aws-glue-api-crawler-pyspark-transforms-SplitFields"></a>

Fractionne un `DynamicFrame` en deux, en fonction des champs spécifiés.

## Exemple
<a name="pyspark-SplitFields-examples"></a>

Nous vous recommandons d'utiliser la méthode [`DynamicFrame.split_fields()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-split_fields) pour fractionner les champs en image `DynamicFrame`. Vous trouverez un exemple de code, consultez [Exemple : utiliser la méthode split\$1fields pour fractionner les champs sélectionnés en une image `DynamicFrame` distincte](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-split_fields-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-SplitFields-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-SplitFields-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-SplitFields-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-SplitFields-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-SplitFields-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-SplitFields-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-SplitFields-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-SplitFields-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-SplitFields-describe)

## \$1\$1call\$1\$1(frame, paths, name1 = None, name2 = None, transformation\$1ctx = "", info = "", stageThreshold = 0, totalThreshold = 0)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitFields-__call__"></a>

Fractionne un ou plusieurs champs d'une image `DynamicFrame` en une nouvelle image `DynamicFrame` et crée une autre nouvelle image `DynamicFrame` contenant les champs restants.
+ `frame` – `DynamicFrame` source à scinder en deux nouveaux objets (obligatoire).
+ `paths` – Liste des chemins complets vers les champs à fractionner (obligatoire).
+ `name1` – nom à attribuer au `DynamicFrame` qui contiendra les champs à fractionner (facultatif). Si aucun nom n'est fourni, le nom de la trame source est utilisé, « 1 » étant ajouté.
+ `name2` – nom à attribuer au `DynamicFrame` qui contient les champs qui restent après le fractionnement des champs spécifiés (facultatif). Si aucun nom n'est fourni, le nom de la trame source est utilisé, « 2 » étant ajouté.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée.(facultatif) La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté.(facultatif) La valeur par défaut est zéro.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitFields-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitFields-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitFields-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitFields-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitFields-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitFields-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitFields-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# SplitRows classe
<a name="aws-glue-api-crawler-pyspark-transforms-SplitRows"></a>

Crée une collection `DynamicFrameCollection` qui contient deux images `DynamicFrames`. Une image `DynamicFrame` contient uniquement les champs spécifiés à fractionner et l'autre contient les champs restants.

## Exemple
<a name="pyspark-SplitRows-examples"></a>

Nous vous recommandons d'utiliser la méthode [`DynamicFrame.split_rows()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-split_rows) pour fractionner les lignes en image `DynamicFrame`. Vous trouverez un exemple de code, consultez [Exemple : utiliser la méthode split\$1rows pour fractionner des lignes en une image `DynamicFrame`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-split_rows-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-SplitRows-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-SplitRows-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-SplitRows-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-SplitRows-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-SplitRows-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-SplitRows-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-SplitRows-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-SplitRows-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-SplitRows-describe)

## \$1\$1call\$1\$1(frame, comparison\$1dict, name1="frame1", name2="frame2", transformation\$1ctx = "", info = None, stageThreshold = 0, totalThreshold = 0)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitRows-__call__"></a>

Scinde une ou plusieurs lignes d'un objet `DynamicFrame` en un nouveau `DynamicFrame`.
+ `frame` – `DynamicFrame` source à scinder en deux nouveaux objets (obligatoire).
+ `comparison_dict` – Dictionnaire dans lequel la clé est le chemin d'accès complet à une colonne et la valeur est un autre dictionnaire permettant de mapper les comparateurs aux valeurs auxquelles les valeurs de la colonne sont comparées. Par exemple, `{"age": {">": 10, "<": 20}}` scinde les lignes où la valeur de « age » est comprise entre 10 et 20 (exclus), à partir des lignes où « age » est en dehors de la plage (obligatoire).
+ `name1` – Nom à attribuer à l'objet `DynamicFrame` qui contient les lignes à scinder (facultatif).
+ `name2` - Nom à attribuer à l'objet `DynamicFrame` qui contient les lignes qui restent après que les lignes spécifiées ont été scindées (facultatif).
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée.(facultatif) La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté.(facultatif) La valeur par défaut est zéro.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitRows-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitRows-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitRows-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitRows-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitRows-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitRows-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-SplitRows-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# Classe Unbox
<a name="aws-glue-api-crawler-pyspark-transforms-Unbox"></a>

Effectue une opération unbox sur un champ de chaîne (ou le reformate) dans une image `DynamicFrame`.

## Exemple
<a name="pyspark-Unbox-example"></a>

Nous vous recommandons d'utiliser la méthode [`DynamicFrame.unbox()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-unbox) pour effectuer une opération unbox sur un champ dans une image `DynamicFrame`. Vous trouverez un exemple de code, consultez [Exemple : utiliser la méthode unbox pour effectuer une opération unbox sur un champ de chaîne en un champ struct](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-unbox-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-Unbox-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-Unbox-__call__)
+ [s'appliquents'appliquent](#aws-glue-api-crawler-pyspark-transforms-Unbox-apply)
+ [namename](#aws-glue-api-crawler-pyspark-transforms-Unbox-name)
+ [describeArgsdescribeArgs](#aws-glue-api-crawler-pyspark-transforms-Unbox-describeArgs)
+ [describeReturndescribeReturn](#aws-glue-api-crawler-pyspark-transforms-Unbox-describeReturn)
+ [describeTransformdescribeTransform](#aws-glue-api-crawler-pyspark-transforms-Unbox-describeTransform)
+ [describeErrorsdescribeErrors](#aws-glue-api-crawler-pyspark-transforms-Unbox-describeErrors)
+ [describedescribe](#aws-glue-api-crawler-pyspark-transforms-Unbox-describe)

## \$1\$1call\$1\$1(frame, path, format, transformation\$1ctx = "", info="", stageThreshold=0, totalThreshold=0, \$1\$1options)
<a name="aws-glue-api-crawler-pyspark-transforms-Unbox-__call__"></a>

Effectue une opération unbox sur un champ de chaîne dans un `DynamicFrame`.
+ `frame` – `DynamicFrame` dans lequel effectuer une opération unbox sur un champ (obligatoire).
+ `path` - Chemin d'accès complet au `StringNode` sur lequel effectuer une opération unbox (obligatoire).
+ `format` – spécification de format (facultatif). Utilisée pour une connexion Amazon S3 ou AWS Glue prenant en charge plusieurs formats. Consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) pour connaître les formats pris en charge.
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée.(facultatif) La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté.(facultatif) La valeur par défaut est zéro.
+ `separator` - Jeton de séparateur (facultatif).
+ `escaper` – Jeton d'échappement (facultatif).
+ `skipFirst` - `True` si la première ligne de données doit être ignorée, ou `False` dans le cas contraire (facultatif).
+ withSchema`` – Chaîne contenant un schéma pour les données sur lesquelles effectuer l'opération unbox (facultatif). Doit toujours être créée à l'aide de `StructType.json`.
+ `withHeader` - `True` si les données à décompresser comprennent un en-tête, ou `False` dans le cas contraire (facultatif).

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-Unbox-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Unbox-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Unbox-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Unbox-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Unbox-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Unbox-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Unbox-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# UnnestFrame classe
<a name="aws-glue-api-crawler-pyspark-transforms-UnnestFrame"></a>

Désimbrique une image `DynamicFrame`, aplatit les objets imbriqués en éléments de niveau supérieur et génère les clés de jointure pour les objets de tableau.

## Exemple
<a name="pyspark-UnnestFrame-example"></a>

Nous vous recommandons d'utiliser la méthode [`DynamicFrame.unnest()`](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-unnest) pour aplatir les structures imbriquées dans une image `DynamicFrame`. Vous trouverez un exemple de code, consultez [Exemple : utiliser la méthode unnest pour transformer des champs imbriqués en champs de niveau supérieur](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#pyspark-unnest-example).

## Méthodes
<a name="aws-glue-api-crawler-pyspark-transforms-UnnestFrame-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-crawler-pyspark-transforms-UnnestFrame-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-UnnestFrame-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-UnnestFrame-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-UnnestFrame-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-UnnestFrame-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-UnnestFrame-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-UnnestFrame-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-UnnestFrame-describe)

## \$1\$1call\$1\$1(frame, transformation\$1ctx = "", info="", stageThreshold=0, totalThreshold=0)
<a name="aws-glue-api-crawler-pyspark-transforms-UnnestFrame-__call__"></a>

Désimbrique une image `DynamicFrame`, aplatit les objets imbriqués en éléments de niveau supérieur et génère les clés de jointure pour les objets de tableau.
+ `frame` – Objet `DynamicFrame` à désimbriquer (requis).
+ `transformation_ctx` – Chaîne unique utilisée pour identifier les informations sur l'état (facultatif).
+ `info` – Chaîne associée à des erreurs dans la transformation (facultatif).
+ `stageThreshold` – nombre maximal d'erreurs qui peuvent avoir lieu dans la transformation avant qu'elle ne soit arrêtée.(facultatif) La valeur par défaut est zéro.
+ `totalThreshold` – nombre maximal d'erreurs pouvant se produire globalement avant que le processus de traitement des erreurs ne soit arrêté.(facultatif) La valeur par défaut est zéro.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-UnnestFrame-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-UnnestFrame-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-UnnestFrame-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-UnnestFrame-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-UnnestFrame-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-UnnestFrame-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-UnnestFrame-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# FlagDuplicatesInColumn classe
<a name="aws-glue-api-pyspark-transforms-FlagDuplicatesInColumn"></a>

La transformation `FlagDuplicatesInColumn` renvoie une nouvelle colonne avec une valeur spécifiée dans chaque ligne qui indique si la valeur de la colonne source de la ligne correspond à une valeur d’une ligne précédente de la colonne source. Lorsque des correspondances sont trouvées, elles sont signalées comme des doublons. L’occurrence initiale n’est pas signalée, car elle ne correspond pas à une ligne précédente.

## Exemple
<a name="pyspark-FlagDuplicatesInColumn-examples"></a>

```
from pyspark.context import SparkContext
from pyspark.sql import SparkSession      
from awsgluedi.transforms import *

sc = SparkContext()
spark = SparkSession(sc)

datasource1 = spark.read.json("s3://${BUCKET}/json/zips/raw/data")

try:
    df_output = column.FlagDuplicatesInColumn.apply(
        data_frame=datasource1,
        spark_context=sc,
        source_column="city",
        target_column="flag_col",
        true_string="True",
        false_string="False"
    )
except:
    print("Unexpected Error happened ")
    raise
```

## Output
<a name="pyspark-FlagDuplicatesInColumn-output"></a>

 La `FlagDuplicatesInColumn` transformation ajoutera une nouvelle colonne `flag\$1col` à la `df\$1output`. DataFrame Cette colonne contiendra une valeur de chaîne indiquant si la ligne correspondante possède une valeur dupliquée dans la colonne `city` ou non. Si une ligne contient une valeur `city` dupliquée, la valeur `flag\$1col` contiendra la valeur `true\$1string` « True ». Si une ligne possède une valeur `city` unique, la valeur `flag\$1col` contiendra la valeur `false\$1string` « False ». 

 Le `df\$1output` qui en DataFrame résultera contiendra toutes les colonnes du `datasource1` original, plus la colonne `flag\$1col` supplémentaire indiquant les valeurs dupliquées de `city`. DataFrame 

## Méthodes
<a name="aws-glue-api-pyspark-transforms-FlagDuplicatesInColumn-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-pyspark-transforms-FlagDuplicatesInColumn-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-FlagDuplicatesInColumn-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-FlagDuplicatesInColumn-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-FlagDuplicatesInColumn-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-FlagDuplicatesInColumn-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-FlagDuplicatesInColumn-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-FlagDuplicatesInColumn-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-FlagDuplicatesInColumn-describe)

## \$1\$1call\$1\$1(spark\$1context, data\$1frame, source\$1column, target\$1column, true\$1string=DEFAULT\$1TRUE\$1STRING, false\$1string=DEFAULT\$1FALSE\$1STRING)
<a name="aws-glue-api-pyspark-transforms-FlagDuplicatesInColumn-__call__"></a>

La transformation `FlagDuplicatesInColumn` renvoie une nouvelle colonne avec une valeur spécifiée dans chaque ligne qui indique si la valeur de la colonne source de la ligne correspond à une valeur d’une ligne précédente de la colonne source. Lorsque des correspondances sont trouvées, elles sont signalées comme des doublons. L’occurrence initiale n’est pas signalée, car elle ne correspond pas à une ligne précédente.
+ `source_column` : nom de la colonne source.
+ `target_column` : nom de la colonne cible.
+ `true_string` : chaîne à insérer dans la colonne cible lorsqu’une valeur de colonne source duplique une valeur antérieure dans cette colonne.
+ `false_string` : chaîne à insérer dans la colonne cible lorsqu’une valeur de colonne source est différente des valeurs précédentes dans cette colonne.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-FlagDuplicatesInColumn-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FlagDuplicatesInColumn-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FlagDuplicatesInColumn-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FlagDuplicatesInColumn-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FlagDuplicatesInColumn-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FlagDuplicatesInColumn-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FlagDuplicatesInColumn-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# FormatPhoneNumber classe
<a name="aws-glue-api-pyspark-transforms-FormatPhoneNumber"></a>

La transformation `FormatPhoneNumber` renvoie une colonne dans laquelle une chaîne de numéro de téléphone est convertie en valeur formatée.

## Exemple
<a name="pyspark-FormatPhoneNumber-examples"></a>

```
from pyspark.context import SparkContext
from pyspark.sql import SparkSession
from awsgluedi.transforms import *

sc = SparkContext()
spark = SparkSession(sc)

input_df = spark.createDataFrame(
    [
        ("408-341-5669",),
        ("4083415669",)
    ],
    ["phone"],
)

try:
    df_output = column_formatting.FormatPhoneNumber.apply(
        data_frame=input_df,
        spark_context=sc,
        source_column="phone",
        default_region="US"
    )
    df_output.show()
except:
    print("Unexpected Error happened ")
    raise
```

## Output
<a name="pyspark-FormatPhoneNumber-output"></a>

 Le résultat sera : 

```
```
+---------------+
| phone|
+---------------+
|(408) 341-5669|
|(408) 341-5669|
+---------------+
```
```

 La transformation `FormatPhoneNumber` prend la valeur `source\$1column` `"phone"` et la valeur `default\$1region` `"US"`. 

 La transformation permet de formater correctement les deux numéros de téléphone, quel que soit leur format initial, au format étasunien standard `(408) 341-5669`. 

## Méthodes
<a name="aws-glue-api-pyspark-transforms-FormatPhoneNumber-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-pyspark-transforms-FormatPhoneNumber-__call__)
+ [s'appliquents'appliquent](#aws-glue-api-crawler-pyspark-transforms-FormatPhoneNumber-apply)
+ [namename](#aws-glue-api-crawler-pyspark-transforms-FormatPhoneNumber-name)
+ [describeArgsdescribeArgs](#aws-glue-api-crawler-pyspark-transforms-FormatPhoneNumber-describeArgs)
+ [describeReturndescribeReturn](#aws-glue-api-crawler-pyspark-transforms-FormatPhoneNumber-describeReturn)
+ [describeTransformdescribeTransform](#aws-glue-api-crawler-pyspark-transforms-FormatPhoneNumber-describeTransform)
+ [describeErrorsdescribeErrors](#aws-glue-api-crawler-pyspark-transforms-FormatPhoneNumber-describeErrors)
+ [describedescribe](#aws-glue-api-crawler-pyspark-transforms-FormatPhoneNumber-describe)

## \$1\$1call\$1\$1(spark\$1context, data\$1frame, source\$1column, phone\$1number\$1format=None, default\$1region=None, default\$1region\$1column=None)
<a name="aws-glue-api-pyspark-transforms-FormatPhoneNumber-__call__"></a>

La transformation `FormatPhoneNumber` renvoie une colonne dans laquelle une chaîne de numéro de téléphone est convertie en valeur formatée.
+ `source_column` : nom d’une colonne existante.
+ `phone_number_format` : format dans lequel le numéro de téléphone sera converti. Si aucun format n’est spécifié, le format par défaut est `E.164`, un format de numéro de téléphone standard reconnu à l’échelle internationale. Les valeurs valides sont les suivantes : 
  + E164 (omettre le point après E)
+ `default_region` : code de région valide composé de deux ou trois lettres majuscules qui indique la région du numéro de téléphone lorsque aucun code de pays n’est présent dans le numéro lui-même. Tout au plus, une des `defaultRegion` ou `defaultRegionColumn` peut être fournie.
+ `default_region_column` : nom d’une colonne de type de données avancé `Country`. Le code de région de la colonne spécifiée est utilisé pour déterminer le code de pays pour le numéro de téléphone lorsque aucun code de pays n’est présent dans le numéro lui-même. Tout au plus, une des `defaultRegion` ou `defaultRegionColumn` peut être fournie.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-FormatPhoneNumber-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FormatPhoneNumber-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FormatPhoneNumber-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FormatPhoneNumber-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FormatPhoneNumber-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FormatPhoneNumber-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FormatPhoneNumber-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# FormatCase classe
<a name="aws-glue-api-pyspark-transforms-FormatCase"></a>

La transformation `FormatCase` remplace chaque chaîne d’une colonne par le type de cas spécifié.

## Exemple
<a name="pyspark-FormatCase-examples"></a>

```
from pyspark.context import SparkContext
from pyspark.sql import SparkSession
from awsgluedi.transforms import *

sc = SparkContext()
spark = SparkSession(sc)

datasource1 = spark.read.json("s3://${BUCKET}/json/zips/raw/data")

try:
    df_output = data_cleaning.FormatCase.apply(
        data_frame=datasource1,
        spark_context=sc,
        source_column="city",
        case_type="LOWER"
    )    
except:
    print("Unexpected Error happened ")
    raise
```

## Output
<a name="pyspark-FormatCase-output"></a>

 La transformation `FormatCase` convertira les valeurs de la colonne `city` en minuscules en fonction du paramètre `case\$1type="LOWER"`. Le `df\$1output` qui en DataFrame résultera contiendra toutes les colonnes du `datasource1` original, mais avec les valeurs des colonnes `city` DataFrame en minuscules. 

## Méthodes
<a name="aws-glue-api-pyspark-transforms-FormatCase-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-pyspark-transforms-FormatCase-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-FormatCase-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-FormatCase-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-FormatCase-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-FormatCase-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-FormatCase-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-FormatCase-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-FormatCase-describe)

## \$1\$1call\$1\$1(spark\$1context, data\$1frame, source\$1column, case\$1type)
<a name="aws-glue-api-pyspark-transforms-FormatCase-__call__"></a>

La transformation `FormatCase` remplace chaque chaîne d’une colonne par le type de cas spécifié.
+ `source_column` : nom d’une colonne existante.
+ `case_type` : les types de casse pris en charge sont `CAPITAL`, `LOWER`, `UPPER` et `SENTENCE`. 

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-FormatCase-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FormatCase-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FormatCase-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FormatCase-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FormatCase-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FormatCase-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FormatCase-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# FillWithMode classe
<a name="aws-glue-api-pyspark-transforms-FillWithMode"></a>

 La transformation `FillWithMode` met en forme une colonne en fonction du format de numéro de téléphone que vous spécifiez. Vous pouvez également définir une logique de disjoncteur de lien, dans laquelle certaines valeurs sont identiques. Prenons l’exemple des valeurs suivantes : `1 2 2 3 3 4`. 

 Une valeur modeType de `MINIMUM` entraîne le renvoi par `FillWithMode` de 2 comme valeur de mode. Si la valeur modeType est définie sur `MAXIMUM`, le mode est 3. Pour `AVERAGE` le mode est 2,5. 

## Exemple
<a name="pyspark-FillWithMode-examples"></a>

```
from awsglue.context import *
from pyspark.sql import SparkSession
from awsgluedi.transforms import *

sc = SparkContext()
spark = SparkSession(sc)

input_df = spark.createDataFrame(
    [
        (105.111, 13.12),
        (1055.123, 13.12),
        (None, 13.12),
        (13.12, 13.12),
        (None, 13.12),
    ],
    ["source_column_1", "source_column_2"],
)

try:
    df_output = data_quality.FillWithMode.apply(
        data_frame=input_df,
        spark_context=sc,
        source_column="source_column_1",
        mode_type="MAXIMUM"
    )
    df_output.show()    
except:
    print("Unexpected Error happened ")
    raise
```

## Output
<a name="pyspark-FillWithMode-output"></a>

 La sortie du code donné sera : 

```
```
+---------------+---------------+
|source_column_1|source_column_2|
+---------------+---------------+
| 105.111| 13.12|
| 1055.123| 13.12|
| 1055.123| 13.12|
| 13.12| 13.12|
| 1055.123| 13.12|
+---------------+---------------+
```
```

 La `FillWithMode` transformation du module `awsglue.data\$1quality` est appliquée au `input\$1df`. DataFrame Elle remplace les valeurs `null` de la colonne `source_column_1` par la valeur maximale (`mode\$1type="MAXIMUM"`) parmi les valeurs non nulles de cette colonne. 

 Dans ce cas, la valeur maximale de la colonne `source_column_1` est `1 055,123`. Par conséquent, les valeurs `null` `source_column_1` sont remplacées par `1055,123` dans la sortie `df\$1output`. DataFrame 

## Méthodes
<a name="aws-glue-api-pyspark-transforms-FillWithMode-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-pyspark-transforms-FillWithMode-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-FillWithMode-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-FillWithMode-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-FillWithMode-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-FillWithMode-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-FillWithMode-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-FillWithMode-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-FillWithMode-describe)

## \$1\$1call\$1\$1(spark\$1context, data\$1frame, source\$1column, mode\$1type)
<a name="aws-glue-api-pyspark-transforms-FillWithMode-__call__"></a>

 La transformation `FillWithMode` met en forme la casse des chaînes dans une colonne. 
+ `source_column` : nom d’une colonne existante.
+ `mode_type` : comment résoudre les valeurs à égalité dans les données. Cette valeur doit être l’une des valeurs suivantes : `MINIMUM`, `NONE`, `AVERAGE` ou `MAXIMUM`. 

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-FillWithMode-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FillWithMode-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FillWithMode-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FillWithMode-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FillWithMode-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FillWithMode-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FillWithMode-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# FlagDuplicateRows classe
<a name="aws-glue-api-pyspark-transforms-FlagDuplicateRows"></a>

La transformation `FlagDuplicateRows` renvoie une nouvelle colonne avec une valeur spécifiée dans chaque ligne qui indique si cette ligne correspond exactement à une ligne précédente dans le jeu de données. Lorsque des correspondances sont trouvées, elles sont signalées comme des doublons. L’occurrence initiale n’est pas signalée, car elle ne correspond pas à une ligne précédente. 

## Exemple
<a name="pyspark-FlagDuplicateRows-examples"></a>

```
from pyspark.context import SparkContext
from pyspark.sql import SparkSession
from awsgluedi.transforms import *

sc = SparkContext()
spark = SparkSession(sc)

input_df = spark.createDataFrame(
    [
        (105.111, 13.12),
        (13.12, 13.12),
        (None, 13.12),
        (13.12, 13.12),
        (None, 13.12),
    ],
    ["source_column_1", "source_column_2"],
)

try:
    df_output = data_quality.FlagDuplicateRows.apply(
        data_frame=input_df,
        spark_context=sc,
        target_column="flag_row",
        true_string="True",
        false_string="False",
        target_index=1
    )
except:
    print("Unexpected Error happened ")
    raise
```

## Output
<a name="pyspark-FlagDuplicateRows-output"></a>

 La sortie sera une PySpark DataFrame avec une colonne supplémentaire `flag_row` qui indique si une ligne est un doublon ou non, en fonction de la `source_column_1` colonne. Le fichier `df\$1output` qui en résultera DataFrame contiendra les lignes suivantes :

```
```
+---------------+---------------+--------+
|source_column_1|source_column_2|flag_row|
+---------------+---------------+--------+
| 105.111| 13.12| False|
| 13.12| 13.12| True|
| null| 13.12| True|
| 13.12| 13.12| True|
| null| 13.12| True|
+---------------+---------------+--------+
```
```

 La colonne `flag_row` indique si une ligne est un doublon ou non. La valeur `true\$1string` est définie sur « True » et `false\$1string` sur « False ». Le `target\$1index` est défini sur 1, ce qui signifie que la `flag_row` colonne sera insérée à la deuxième position (index 1) dans la sortie. DataFrame 

## Méthodes
<a name="aws-glue-api-pyspark-transforms-FlagDuplicateRows-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-pyspark-transforms-FlagDuplicateRows-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-FlagDuplicateRows-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-FlagDuplicateRows-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-FlagDuplicateRows-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-FlagDuplicateRows-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-FlagDuplicateRows-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-FlagDuplicateRows-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-FlagDuplicateRows-describe)

## \$1\$1call\$1\$1(spark\$1context, data\$1frame, target\$1column, true\$1string=DEFAULT\$1TRUE\$1STRING, false\$1string=DEFAULT\$1FALSE\$1STRING, target\$1index=None)
<a name="aws-glue-api-pyspark-transforms-FlagDuplicateRows-__call__"></a>

La transformation `FlagDuplicateRows` renvoie une nouvelle colonne avec une valeur spécifiée dans chaque ligne qui indique si cette ligne correspond exactement à une ligne précédente dans le jeu de données. Lorsque des correspondances sont trouvées, elles sont signalées comme des doublons. L’occurrence initiale n’est pas signalée, car elle ne correspond pas à une ligne précédente. 
+ `true_string` : valeur à insérer si la ligne correspond à une ligne précédente.
+ `false_string` : valeur à insérer si la ligne est unique. 
+  `target_column` : nom de la nouvelle colonne insérée dans le jeu de données. 

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-FlagDuplicateRows-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FlagDuplicateRows-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FlagDuplicateRows-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FlagDuplicateRows-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FlagDuplicateRows-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FlagDuplicateRows-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-FlagDuplicateRows-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# RemoveDuplicates classe
<a name="aws-glue-api-pyspark-transforms-RemoveDuplicates"></a>

 La transformation `RemoveDuplicates` supprime une ligne entière si une valeur dupliquée est détectée dans une colonne source sélectionnée. 

## Exemple
<a name="pyspark-RemoveDuplicates-examples"></a>

```
from pyspark.context import SparkContext
from pyspark.sql import SparkSession
from awsgluedi.transforms import *

sc = SparkContext()
spark = SparkSession(sc)

input_df = spark.createDataFrame(
    [
        (105.111, 13.12),
        (13.12, 13.12),
        (None, 13.12),
        (13.12, 13.12),
        (None, 13.12),
    ],
    ["source_column_1", "source_column_2"],
)

try:
    df_output = data_quality.RemoveDuplicates.apply(
        data_frame=input_df,
        spark_context=sc,
        source_column="source_column_1"
    )
except:
    print("Unexpected Error happened ")
    raise
```

## Output
<a name="pyspark-RemoveDuplicates-output"></a>

 Le résultat sera un PySpark DataFrame avec les doublons supprimés en fonction de la `source_column_1` colonne. Le fichier `df\$1output` qui en résultera DataFrame contiendra les lignes suivantes : 

```
```
+---------------+---------------+
|source_column_1|source_column_2|
+---------------+---------------+
| 105.111| 13.12|
| 13.12| 13.12|
| null| 13.12|
+---------------+---------------+
```
```

 Notez que les lignes avec les `source_column_1` valeurs « 13.12 » et « null » n'apparaissent qu'une seule fois dans la sortie DataFrame, car les doublons ont été supprimés en fonction de la colonne. `source_column_1` 

## Méthodes
<a name="aws-glue-api-pyspark-transforms-RemoveDuplicates-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-pyspark-transforms-RemoveDuplicates-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-RemoveDuplicates-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-RemoveDuplicates-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-RemoveDuplicates-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-RemoveDuplicates-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-RemoveDuplicates-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-RemoveDuplicates-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-RemoveDuplicates-describe)

## \$1\$1call\$1\$1(spark\$1context, data\$1frame, source\$1column)
<a name="aws-glue-api-pyspark-transforms-RemoveDuplicates-__call__"></a>

 La transformation `RemoveDuplicates` supprime une ligne entière si une valeur dupliquée est détectée dans une colonne source sélectionnée. 
+ `source_column` : nom d’une colonne existante.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-RemoveDuplicates-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-RemoveDuplicates-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-RemoveDuplicates-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-RemoveDuplicates-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-RemoveDuplicates-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-RemoveDuplicates-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-RemoveDuplicates-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# MonthName classe
<a name="aws-glue-api-pyspark-transforms-MonthName"></a>

 La transformation `MonthName` crée une colonne contenant le nom du mois, à partir d’une chaîne représentant une date. 

## Exemple
<a name="pyspark-MonthName-examples"></a>

```
from pyspark.context import SparkContext
from pyspark.sql import SparkSession
from awsgluedi.transforms import *

sc = SparkContext()
spark = SparkSession(sc)

spark.conf.set("spark.sql.legacy.timeParserPolicy", "LEGACY")

input_df = spark.createDataFrame(
    [
        ("20-2018-12",),
        ("2018-20-12",),
        ("20182012",),
        ("12202018",),
        ("20122018",),
        ("20-12-2018",),
        ("12/20/2018",),
        ("02/02/02",),
        ("02 02 2009",),
        ("02/02/2009",),
        ("August/02/2009",),
        ("02/june/2009",),
        ("02/2020/june",),
        ("2013-02-21 06:35:45.658505",),
        ("August 02 2009",),
        ("2013/02/21",),
        (None,),
    ],
    ["column_1"],
)

try:
    df_output = datetime_functions.MonthName.apply(
        data_frame=input_df,
        spark_context=sc,
        source_column="column_1",
        target_column="target_column"
    )
    df_output.show()
except:
    print("Unexpected Error happened ")
    raise
```

## Output
<a name="pyspark-MonthName-output"></a>

 Le résultat sera : 

```
```
+------------+------------+
| column_1|target_column|
+------------+------------+
|20-2018-12 | December |
|2018-20-12 | null |
| 20182012| null |
| 12202018| null |
| 20122018| null |
|20-12-2018 | December |
|12/20/2018 | December |
| 02/02/02 | February |
|02 02 2009 | February |
|02/02/2009 | February |
|August/02/2009| August |
|02/june/2009| null |
|02/2020/june| null |
|2013-02-21 06:35:45.658505| February |
|August 02 2009| August |
| 2013/02/21| February |
| null | null |
+------------+------------+
```
```

 La transformation `MonthName` prend la valeur `source\$1column` `"column\$11"` et la valeur `target\$1column` `"target\$1column"`. Il tente d'extraire le nom du mois à partir des date/time chaînes de la colonne `"column\$11"` et le place dans la colonne `"target\$1column"`. Si le format de la date/time chaîne n'est pas reconnu ou ne peut pas être analysée, la valeur « target\$1column » est définie sur « null`. 

 La transformation extrait avec succès le nom du mois à partir de différents date/time formats, tels que « 20-12-2018 », « 20/12/2018 », « 02/02/2009 », « 2013-02-21 06:35:45.658 505 » et « 02 août 2009 ». 

## Méthodes
<a name="aws-glue-api-pyspark-transforms-MonthName-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-pyspark-transforms-MonthName-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-MonthName-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-MonthName-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-MonthName-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-MonthName-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-MonthName-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-MonthName-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-MonthName-describe)

## \$1\$1call\$1\$1(spark\$1context, data\$1frame, target\$1column, source\$1column=None, value=None)
<a name="aws-glue-api-pyspark-transforms-MonthName-__call__"></a>

 La transformation `MonthName` crée une colonne contenant le nom du mois, à partir d’une chaîne représentant une date. 
+ `source_column` : nom d’une colonne existante.
+ `value` : chaîne de caractères à évaluer.
+ `target_column` : nom de la colonne qui vient d’être créée.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-MonthName-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-MonthName-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-MonthName-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-MonthName-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-MonthName-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-MonthName-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-MonthName-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# IsEven classe
<a name="aws-glue-api-pyspark-transforms-IsEven"></a>

 La transformation `IsEven` renvoie une valeur booléenne dans une nouvelle colonne qui indique si la colonne ou la valeur source est paire. Si la colonne ou la valeur source est décimale, le résultat est false. 

## Exemple
<a name="pyspark-IsEven-examples"></a>

```
from pyspark.context import SparkContext
from pyspark.sql import SparkSession
from awsgluedi.transforms import *

sc = SparkContext()
spark = SparkSession(sc)

input_df = spark.createDataFrame(
    [(5,), (0,), (-1,), (2,), (None,)],
    ["source_column"],
)

try:
    df_output = math_functions.IsEven.apply(
        data_frame=input_df,
        spark_context=sc,
        source_column="source_column",
        target_column="target_column",
        value=None,
        true_string="Even",
        false_string="Not even",
    )
    df_output.show()
except:
    print("Unexpected Error happened ")
    raise
```

## Output
<a name="pyspark-IsEven-output"></a>

 Le résultat sera : 

```
```
+------------+------------+
|source_column|target_column|
+------------+------------+
| 5| Not even|
| 0| Even|
| -1| Not even|
| 2| Even|
| null| null|
+------------+------------+
```
```

 La transformation `IsEven` prend la valeur `source\$1column` "source\$1column" et la valeur `target\$1column` "target\$1column". Elle vérifie si la valeur de `"source\$1column"` est paire ou non. Si la valeur est paire, elle définit la valeur `"target\$1column"` sur `true\$1string` "Even". Si la valeur est impaire, elle définit la valeur `"target\$1column"` sur `false\$1string` "Not even". Si la valeur `"source\$1column"` est `null`, la valeur `"target\$1column"` est définie sur `null`. 

 La transformation identifie correctement les nombres pairs (0 et 2) et définit la valeur `"target\$1column"` sur "Even". Pour les nombres impairs (5 et -1), elle définit la valeur `"target\$1column"` sur "Not even". Pour la valeur `null` dans `"source\$1column"`, la valeur `"target\$1column"` est définie sur `null`. 

## Méthodes
<a name="aws-glue-api-pyspark-transforms-IsEven-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-pyspark-transforms-IsEven-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-IsEven-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-IsEven-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-IsEven-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-IsEven-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-IsEven-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-IsEven-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-IsEven-describe)

## \$1\$1call\$1\$1(spark\$1context, data\$1frame, target\$1column, source\$1column=None, true\$1string=DEFAULT\$1TRUE\$1STRING, false\$1string=DEFAULT\$1FALSE\$1STRING, value=None)
<a name="aws-glue-api-pyspark-transforms-IsEven-__call__"></a>

 La transformation `IsEven` renvoie une valeur booléenne dans une nouvelle colonne qui indique si la colonne ou la valeur source est paire. Si la colonne ou la valeur source est décimale, le résultat est false. 
+ `source_column` : nom d’une colonne existante.
+ `target_column` : le nom de la nouvelle colonne à créer.
+ `true_string` : chaîne indiquant si la valeur est paire.
+ `false_string` : chaîne indiquant si la valeur est impaire.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-IsEven-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IsEven-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IsEven-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IsEven-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IsEven-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IsEven-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IsEven-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# CryptographicHash classe
<a name="aws-glue-api-pyspark-transforms-CryptographicHash"></a>

 La transformation `CryptographicHash` applique un algorithme aux valeurs de hachage de la colonne. 

## Exemple
<a name="pyspark-CryptographicHash-examples"></a>

```
from pyspark.context import SparkContext
from pyspark.sql import SparkSession
from awsgluedi.transforms import *

secret = "${SECRET}"
sc = SparkContext()
spark = SparkSession(sc)

input_df = spark.createDataFrame(
    [
        (1, "1234560000"),
        (2, "1234560001"),
        (3, "1234560002"),
        (4, "1234560003"),
        (5, "1234560004"),
        (6, "1234560005"),
        (7, "1234560006"),
        (8, "1234560007"),
        (9, "1234560008"),
        (10, "1234560009"),
    ],
    ["id", "phone"],
)

try:
    df_output = pii.CryptographicHash.apply(
        data_frame=input_df,
        spark_context=sc,
        source_columns=["id", "phone"],
        secret_id=secret,
        algorithm="HMAC_SHA256",
        output_format="BASE64",
    )
    df_output.show()
except:
    print("Unexpected Error happened ")
    raise
```

## Output
<a name="pyspark-CryptographicHash-output"></a>

Le résultat sera :

```
```
+---+------------+-------------------+-------------------+
| id| phone | id_hashed | phone_hashed |
+---+------------+-------------------+-------------------+
| 1| 1234560000 | QUI1zXTJiXmfIb... | juDBAmiRnnO3g... |
| 2| 1234560001 | ZAUWiZ3dVTzCo... | vC8lgUqBVDMNQ... |
| 3| 1234560002 | ZP4VvZWkqYifu... | Kl3QAkgswYpzB... |
| 4| 1234560003 | 3u8vO3wQ8EQfj... | CPBzK1P8PZZkV... |
| 5| 1234560004 | eWkQJk4zAOIzx... | aLf7+mHcXqbLs... |
| 6| 1234560005 | xtI9fZCJZCvsa... | dy2DFgdYWmr0p... |
| 7| 1234560006 | iW9hew7jnHuOf... | wwfGMCOEv6oOv... |
| 8| 1234560007 | H9V1pqvgkFhfS... | g9WKhagIXy9ht... |
| 9| 1234560008 | xDhEuHaxAUbU5... | b3uQLKPY+Q5vU... |
| 10| 1234560009 | GRN6nFXkxk349... | VJdsKt8VbxBbt... |
+---+------------+-------------------+-------------------+
```
```

 La transformation calcule les hachages cryptographiques des valeurs des colonnes `id` et `phone` à l’aide de l’algorithme et de la clé secrète spécifiés, et code les hachages au format Base64. Le `df\$1output` qui en résulte DataFrame contient toutes les colonnes du `input\$1df` original, plus les colonnes supplémentaires `id\$1hashed` et `phone\$1hashed` avec DataFrame les hachages calculés. 

## Méthodes
<a name="aws-glue-api-pyspark-transforms-CryptographicHash-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-pyspark-transforms-CryptographicHash-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-CryptographicHash-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-CryptographicHash-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-CryptographicHash-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-CryptographicHash-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-CryptographicHash-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-CryptographicHash-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-CryptographicHash-describe)

## \$1\$1call\$1\$1(spark\$1context, data\$1frame, source\$1columns, secret\$1id, algorithm=None, secret\$1version=None, create\$1secret\$1if\$1missing=False, output\$1format=None, entity\$1type\$1filter=None)
<a name="aws-glue-api-pyspark-transforms-CryptographicHash-__call__"></a>

 La transformation `CryptographicHash` applique un algorithme aux valeurs de hachage de la colonne. 
+ `source_columns` : tableau de colonnes existantes.
+ `secret_id` : ARN de la clé secrète Secrets Manager Clé utilisée dans l’algorithme de préfixe de code d’authentification de message utilisant hash (HMAC) pour hacher les colonnes source.
+ `secret_version` : facultatif. Par défaut, la version du secret la plus récente.
+ `entity_type_filter` : tableau facultatif de types d’entité. Peut être utilisé pour chiffrer uniquement les informations personnelles détectées dans une colonne en texte libre.
+ `create_secret_if_missing` : valeur booléenne facultative. Si la valeur est true, il essaiera de créer le secret au nom de l’appelant.
+ `algorithm` : l’algorithme utilisé pour hacher vos données. Valeurs d'énumération valides : MD5,,, SHA1, HMAC\$1 SHA256 SHA512, HMAC\$1MD5, HMAC\$1, HMAC\$1SHA1. SHA256 SHA512

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-CryptographicHash-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-CryptographicHash-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-CryptographicHash-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-CryptographicHash-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-CryptographicHash-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-CryptographicHash-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-CryptographicHash-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# Classe de déchiffrement
<a name="aws-glue-api-pyspark-transforms-Decrypt"></a>

La `Decrypt` transformation déchiffre l'intérieur de Glue. AWS Vos données peuvent également être déchiffrées en dehors de AWS Glue avec le AWS SDK de chiffrement. Si l’ARN de la clé KMS fourni ne correspond pas à celui utilisé pour chiffrer la colonne, l’opération de déchiffrement échoue.

## Exemple
<a name="pyspark-Decrypt-examples"></a>

```
from pyspark.context import SparkContext
from pyspark.sql import SparkSession
from awsgluedi.transforms import *

kms = "${KMS}"
sc = SparkContext()
spark = SparkSession(sc)

input_df = spark.createDataFrame(
    [
        (1, "1234560000"),
        (2, "1234560001"),
        (3, "1234560002"),
        (4, "1234560003"),
        (5, "1234560004"),
        (6, "1234560005"),
        (7, "1234560006"),
        (8, "1234560007"),
        (9, "1234560008"),
        (10, "1234560009"),
    ],
    ["id", "phone"],
)

try:
    df_encrypt = pii.Encrypt.apply(
        data_frame=input_df,
        spark_context=sc,
        source_columns=["phone"],
        kms_key_arn=kms
    )
    df_decrypt = pii.Decrypt.apply(
        data_frame=df_encrypt,
        spark_context=sc,
        source_columns=["phone"],
        kms_key_arn=kms
    )
    df_decrypt.show()
except:
    print("Unexpected Error happened ")
    raise
```

## Output
<a name="pyspark-Decrypt-output"></a>

 La sortie sera une PySpark DataFrame avec la colonne « id » d'origine et la colonne « phone » déchiffrée : 

```
```
+---+------------+
| id| phone|
+---+------------+
| 1| 1234560000|
| 2| 1234560001|
| 3| 1234560002|
| 4| 1234560003|
| 5| 1234560004|
| 6| 1234560005|
| 7| 1234560006|
| 8| 1234560007|
| 9| 1234560008|
| 10| 1234560009|
+---+------------+
```
```

 La transformation `Encrypt` prend la valeur `source\$1columns` comme `["phone"]` et `kms\$1key\$1arn` comme valeur de la variable d’environnement `\$1 \$1KMS\$1`. La transformation chiffre les valeurs de la colonne `phone` à l’aide de la clé KMS spécifiée. Le DataFrame `df\$1encrypt` crypté est ensuite transmis à la `Decrypt` transformation depuis le module `awsglue.pii`. Il prend la valeur `source\$1columns` comme `["phone"]` et `kms\$1key\$1arn` comme valeur de la variable d’environnement `\$1\$1KMS\$1`. La transformation déchiffre les valeurs chiffrées de la colonne `phone` à l’aide de la même clé KMS. Le fichier `df\$1decrypt` qui en résulte DataFrame contient la colonne `id` d'origine et la colonne `phone` décryptée. 

## Méthodes
<a name="aws-glue-api-pyspark-transforms-Decrypt-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-pyspark-transforms-Decrypt-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-Decrypt-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-Decrypt-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-Decrypt-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-Decrypt-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-Decrypt-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-Decrypt-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-Decrypt-describe)

## \$1\$1call\$1\$1(spark\$1context, data\$1frame, source\$1columns, kms\$1key\$1arn)
<a name="aws-glue-api-pyspark-transforms-Decrypt-__call__"></a>

La `Decrypt` transformation déchiffre l'intérieur de Glue. AWS Vos données peuvent également être déchiffrées en dehors de AWS Glue avec le AWS SDK de chiffrement. Si l’ARN de la clé KMS fourni ne correspond pas à celui utilisé pour chiffrer la colonne, l’opération de déchiffrement échoue.
+ `source_columns` : tableau de colonnes existantes.
+ `kms_key_arn`— L'ARN de la AWS clé du service de gestion des clés à utiliser pour déchiffrer les colonnes source.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-Decrypt-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Decrypt-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Decrypt-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Decrypt-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Decrypt-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Decrypt-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Decrypt-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# Classe de chiffrement
<a name="aws-glue-api-pyspark-transforms-Encrypt"></a>

 La `Encrypt` transformation chiffre les colonnes source à l'aide de la AWS clé du service de gestion des clés. La transformation `Encrypt` peut chiffrer jusqu’à 128 Mio par cellule. Elle tentera de préserver le format lors du déchiffrement. Pour préserver le type de données, les métadonnées du type de données doivent être sérialisées à moins de 1 Ko. Dans le cas contraire, vous devez définir le paramètre `preserve_data_type` sur false. Les métadonnées du type de données seront stockées en texte clair dans le contexte du chiffrement. 

## Exemple
<a name="pyspark-Encrypt-examples"></a>

```
from pyspark.context import SparkContext
from pyspark.sql import SparkSession
from awsgluedi.transforms import *

kms = "${KMS}"
sc = SparkContext()
spark = SparkSession(sc)

input_df = spark.createDataFrame(
    [
        (1, "1234560000"),
        (2, "1234560001"),
        (3, "1234560002"),
        (4, "1234560003"),
        (5, "1234560004"),
        (6, "1234560005"),
        (7, "1234560006"),
        (8, "1234560007"),
        (9, "1234560008"),
        (10, "1234560009"),
    ],
    ["id", "phone"],
)

try:
    df_encrypt = pii.Encrypt.apply(
        data_frame=input_df,
        spark_context=sc,
        source_columns=["phone"],
        kms_key_arn=kms
    )
except:
    print("Unexpected Error happened ")
    raise
```

## Output
<a name="pyspark-Encrypt-output"></a>

 La sortie sera une PySpark DataFrame avec la colonne « id » d'origine et une colonne supplémentaire contenant les valeurs cryptées de la colonne « phone ». 

```
```
+---+------------+-------------------------+
| id| phone | phone_encrypted |
+---+------------+-------------------------+
| 1| 1234560000| EncryptedData1234...abc |
| 2| 1234560001| EncryptedData5678...def |
| 3| 1234560002| EncryptedData9012...ghi |
| 4| 1234560003| EncryptedData3456...jkl |
| 5| 1234560004| EncryptedData7890...mno |
| 6| 1234560005| EncryptedData1234...pqr |
| 7| 1234560006| EncryptedData5678...stu |
| 8| 1234560007| EncryptedData9012...vwx |
| 9| 1234560008| EncryptedData3456...yz0 |
| 10| 1234560009| EncryptedData7890...123 |
+---+------------+-------------------------+
```
```

 La transformation `Encrypt` prend la valeur `source\$1columns` comme `["phone"]` et `kms\$1key\$1arn` comme valeur de la variable d’environnement `\$1 \$1KMS\$1`. La transformation chiffre les valeurs de la colonne `phone` à l’aide de la clé KMS spécifiée. Le `df\$1encrypt` qui en résulte DataFrame contient la colonne `id` d'origine, la colonne `phone` d'origine et une colonne supplémentaire nommée `phone\$1encrypted` contenant les valeurs cryptées de la colonne `phone`. 

## Méthodes
<a name="aws-glue-api-pyspark-transforms-Encrypt-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-pyspark-transforms-Encrypt-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-Encrypt-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-Encrypt-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-Encrypt-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-Encrypt-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-Encrypt-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-Encrypt-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-Encrypt-describe)

## \$1\$1call\$1\$1(spark\$1context, data\$1frame, source\$1columns, kms\$1key\$1arn, entity\$1type\$1filter=None, preserve\$1data\$1type=None)
<a name="aws-glue-api-pyspark-transforms-Encrypt-__call__"></a>

 La `Encrypt` transformation chiffre les colonnes source à l'aide de la AWS clé du service de gestion des clés. 
+ `source_columns` : tableau de colonnes existantes.
+ `kms_key_arn`— L'ARN AWS clé du service de gestion des clés à utiliser pour chiffrer les colonnes source.
+ `entity_type_filter` : tableau facultatif de types d’entité. Peut être utilisé pour chiffrer uniquement les informations personnelles détectées dans une colonne en texte libre.
+ `preserve_data_type` : valeur booléenne facultative. La valeur par défaut est true (vrai). Si la valeur est false, le type de données ne sera pas stocké.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-Encrypt-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Encrypt-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Encrypt-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Encrypt-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Encrypt-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Encrypt-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-Encrypt-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# IntToIp classe
<a name="aws-glue-api-pyspark-transforms-IntToIp"></a>

La `IntToIp` transformation convertit la valeur entière de la colonne source ou d'une autre valeur en la IPv4 valeur correspondante dans la colonne cible puis renvoie le résultat dans une nouvelle colonne.

## Exemple
<a name="pyspark-IntToIp-examples"></a>

```
from pyspark.context import SparkContext
from pyspark.sql import SparkSession
from awsgluedi.transforms import *

sc = SparkContext()
spark = SparkSession(sc)

input_df = spark.createDataFrame(
    [
        (3221225473,),
        (0,),
        (1,),
        (100,),
        (168430090,),
        (4294967295,),
        (4294967294,),
        (4294967296,),
        (-1,),
        (None,),
    ],
    ["source_column_int"],
)

try:
    df_output = web_functions.IntToIp.apply(
        data_frame=input_df,
        spark_context=sc,
        source_column="source_column_int",
        target_column="target_column",
        value=None
    )
    df_output.show()
except:
    print("Unexpected Error happened ")
    raise
```

## Output
<a name="pyspark-IntToIp-output"></a>

Le résultat sera :

```
```
+---------------+---------------+
|source_column_int|target_column|
+---------------+---------------+
| 3221225473| 192.0.0.1 |
| 0| 0.0.0.0 |
| 1| 0.0.0.1 |
| 100| 0.0.0.100|
| 168430090 | 10.0.0.10 |
| 4294967295| 255.255.255.255|
| 4294967294| 255.255.255.254|
| 4294967296| null |
| -1| null |
| null| null |
+---------------+---------------+
```
```

 La `IntToIp.apply` transformation prend la `source\$1column` comme `"source\$1column\$1int"` et la `target\$1column` comme `"target\$1column' » et convertit les valeurs entières de la colonne `source\$1column\$1int` en leur représentation d'adresse correspondante et stocke le résultat dans la colonne `target\$1column`. IPv4 

 Pour les valeurs entières valides comprises dans la plage d' IPv4 adresses (0 à 4294967295), la transformation les convertit correctement en leur représentation d' IPv4 adresse (par exemple, 192.0.0.1, 0.0.0.0, 10.0.0.10, 255.255.255.255). 

 Pour les valeurs d’entier situées en dehors de la plage valide (par exemple, 4294967296, -1), la valeur `target\$1column` est définie sur `null`. Pour les valeurs `null` de la colonne `source\$1column\$1int`, la valeur `target\$1column` est également définie sur `null`. 

## Méthodes
<a name="aws-glue-api-pyspark-transforms-IntToIp-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-pyspark-transforms-IntToIp-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-IntToIp-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-IntToIp-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-IntToIp-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-IntToIp-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-IntToIp-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-IntToIp-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-IntToIp-describe)

## \$1\$1call\$1\$1(spark\$1context, data\$1frame, target\$1column, source\$1column=None, value=None)
<a name="aws-glue-api-pyspark-transforms-IntToIp-__call__"></a>

La `IntToIp` transformation convertit la valeur entière de la colonne source ou d'une autre valeur en la IPv4 valeur correspondante dans la colonne cible puis renvoie le résultat dans une nouvelle colonne.
+ `sourceColumn` : nom d’une colonne existante.
+ `value` : chaîne de caractères à évaluer.
+ `targetColumn` : le nom de la nouvelle colonne à créer.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-IntToIp-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IntToIp-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IntToIp-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IntToIp-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IntToIp-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IntToIp-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IntToIp-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

# IpToInt classe
<a name="aws-glue-api-pyspark-transforms-IpToInt"></a>

La `IpToInt` transformation convertit la valeur du protocole Internet version 4 (IPv4) de la colonne source ou une autre valeur en valeur entière correspondante dans la colonne cible, et renvoie le résultat dans une nouvelle colonne. 

## Exemple
<a name="pyspark-IpToInt-examples"></a>

 Pour AWS Glue 4.0 et versions ultérieures, créez ou mettez à jour les arguments de tâche avec `key: --enable-glue-di-transforms, value: true` 

```
from pyspark.context import SparkContext
from awsgluedi.transforms import *

sc = SparkContext()

input_df = spark.createDataFrame(
    [
        ("192.0.0.1",),
        ("10.10.10.10",),
        ("1.2.3.4",),
        ("1.2.3.6",),
        ("http://12.13.14.15",),
        ("https://16.17.18.19",),
        ("1.2.3.4",),
        (None,),
        ("abc",),
        ("abc.abc.abc.abc",),
        ("321.123.123.123",),
        ("244.4.4.4",),
        ("255.255.255.255",),
    ],
    ["source_column_ip"],
)

    df_output = web_functions.IpToInt.apply(
        data_frame=input_df,
        spark_context=sc,
        source_column="source_column_ip",
        target_column="target_column",
        value=None
    )
    df_output.show()
```

## Output
<a name="pyspark-IpToInt-output"></a>

 Le résultat sera : 

```
```
+----------------+---------------+
|source_column_ip| target_column|
+----------------+---------------+
| 192.0.0.1| 3221225473|
| 10.10.10.10| 168427722|
| 1.2.3.4| 16909060|
| 1.2.3.6| 16909062|
|http://12.13.14.15| null|
|https://16.17.18.19| null|
| 1.2.3.4| 16909060|
| null| null|
| abc| null|
|abc.abc.abc.abc| null|
| 321.123.123.123| null|
| 244.4.4.4| 4102444804|
| 255.255.255.255| 4294967295|
+----------------+---------------+
```
```

 La `IpToInt` transformation prend la `source\$1column` comme `"source\$1column\$1ip"` et la `target\$1column` comme `"target\$1column' » et convertit les chaînes d'adresses valides de la colonne `source\$1column\$1ip` en leur représentation entière 32 bits correspondante et stocke le résultat dans la colonne `target\$1column`. IPv4 

 Pour les chaînes d' IPv4 adresses valides (par exemple, « 192.0.0.1", « 10.10.10.10 », « 1.2.3.4 »), la transformation les convertit correctement en leur représentation entière (par exemple, 3221225473, 168427722, 16909060). Pour les chaînes qui ne sont pas des IPv4 adresses valides (par exemple URLs, les chaînes non IP comme « abc », les formats IP non valides tels que « abc.abc.abc.abc »), la valeur « target\$1column » est définie sur « null ». Pour les valeurs `null` de la colonne `source\$1column\$1ip`, la valeur `target\$1column` est également définie sur `null`. 

## Méthodes
<a name="aws-glue-api-pyspark-transforms-IpToInt-_methods"></a>
+ [\$1\$1call\$1\$1](#aws-glue-api-pyspark-transforms-IpToInt-__call__)
+ [s'appliquent](#aws-glue-api-crawler-pyspark-transforms-IpToInt-apply)
+ [name](#aws-glue-api-crawler-pyspark-transforms-IpToInt-name)
+ [describeArgs](#aws-glue-api-crawler-pyspark-transforms-IpToInt-describeArgs)
+ [describeReturn](#aws-glue-api-crawler-pyspark-transforms-IpToInt-describeReturn)
+ [describeTransform](#aws-glue-api-crawler-pyspark-transforms-IpToInt-describeTransform)
+ [describeErrors](#aws-glue-api-crawler-pyspark-transforms-IpToInt-describeErrors)
+ [describe](#aws-glue-api-crawler-pyspark-transforms-IpToInt-describe)

## \$1\$1call\$1\$1(spark\$1context, data\$1frame, target\$1column, source\$1column=None, value=None)
<a name="aws-glue-api-pyspark-transforms-IpToInt-__call__"></a>

 La `IpToInt` transformation convertit la valeur du protocole Internet version 4 (IPv4) de la colonne source ou une autre valeur en valeur entière correspondante dans la colonne cible, et renvoie le résultat dans une nouvelle colonne. 
+ `sourceColumn` : nom d’une colonne existante.
+ `value` : chaîne de caractères à évaluer.
+ `targetColumn` : le nom de la nouvelle colonne à créer.

## apply(cls, \$1args, \$1\$1kwargs)
<a name="aws-glue-api-crawler-pyspark-transforms-IpToInt-apply"></a>

Hérité de `GlueTransform` [s'appliquent](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-apply).

## name(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IpToInt-name"></a>

Hérité de `GlueTransform` [name](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-name).

## describeArgs(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IpToInt-describeArgs"></a>

Hérité de `GlueTransform` [describeArgs](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeArgs).

## describeReturn(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IpToInt-describeReturn"></a>

Hérité de `GlueTransform` [describeReturn](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeReturn).

## describeTransform(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IpToInt-describeTransform"></a>

Hérité de `GlueTransform` [describeTransform](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeTransform).

## describeErrors(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IpToInt-describeErrors"></a>

Hérité de `GlueTransform` [describeErrors](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describeErrors).

## describe(cls)
<a name="aws-glue-api-crawler-pyspark-transforms-IpToInt-describe"></a>

Hérité de `GlueTransform` [describe](aws-glue-api-crawler-pyspark-transforms-GlueTransform.md#aws-glue-api-crawler-pyspark-transforms-GlueTransform-describe).

## Transformations d’intégration de données
<a name="aws-glue-programming-python-di-transforms"></a>

 Pour AWS Glue 4.0 et versions ultérieures, créez ou mettez à jour les arguments de tâche avec`key: --enable-glue-di-transforms, value: true`. 

 Exemple de script de tâche : 

```
from pyspark.context import SparkContext
        
from awsgluedi.transforms import *
sc = SparkContext()

input_df = spark.createDataFrame(
    [(5,), (0,), (-1,), (2,), (None,)],
    ["source_column"],
)

try:
    df_output = math_functions.IsEven.apply(
        data_frame=input_df,
        spark_context=sc,
        source_column="source_column",
        target_column="target_column",
        value=None,
        true_string="Even",
        false_string="Not even",
    )
    df_output.show()   
except:
    print("Unexpected Error happened ")
    raise
```

 Exemples de sessions utilisant des blocs-notes 

```
%idle_timeout 2880
%glue_version 4.0
%worker_type G.1X
%number_of_workers 5
%region eu-west-1
```

```
%%configure
{
    "--enable-glue-di-transforms": "true"
}
```

```
from pyspark.context import SparkContext
from awsgluedi.transforms import *

sc = SparkContext()

input_df = spark.createDataFrame(
    [(5,), (0,), (-1,), (2,), (None,)],
    ["source_column"],
)

try:
    df_output = math_functions.IsEven.apply(
        data_frame=input_df,
        spark_context=sc,
        source_column="source_column",
        target_column="target_column",
        value=None,
        true_string="Even",
        false_string="Not even",
    )
    df_output.show()    
except:
    print("Unexpected Error happened ")
    raise
```

 Exemples de sessions utilisant AWS CLI 

```
aws glue create-session --default-arguments "--enable-glue-di-transforms=true"
```

 Transformations DI : 
+  [FlagDuplicatesInColumn classe](aws-glue-api-pyspark-transforms-FlagDuplicatesInColumn.md) 
+  [FormatPhoneNumber classe](aws-glue-api-pyspark-transforms-FormatPhoneNumber.md) 
+  [FormatCase classe](aws-glue-api-pyspark-transforms-FormatCase.md) 
+  [FillWithMode classe](aws-glue-api-pyspark-transforms-FillWithMode.md) 
+  [FlagDuplicateRows classe](aws-glue-api-pyspark-transforms-FlagDuplicateRows.md) 
+  [RemoveDuplicates classe](aws-glue-api-pyspark-transforms-RemoveDuplicates.md) 
+  [MonthName classe](aws-glue-api-pyspark-transforms-MonthName.md) 
+  [IsEven classe](aws-glue-api-pyspark-transforms-IsEven.md) 
+  [CryptographicHash classe](aws-glue-api-pyspark-transforms-CryptographicHash.md) 
+  [Classe de déchiffrement](aws-glue-api-pyspark-transforms-Decrypt.md) 
+  [Classe de chiffrement](aws-glue-api-pyspark-transforms-Encrypt.md) 
+  [IntToIp classe](aws-glue-api-pyspark-transforms-IntToIp.md) 
+  [IpToInt classe](aws-glue-api-pyspark-transforms-IpToInt.md) 

### Maven : création d’une offre groupée du plug-in pour vos applications Spark
<a name="aws-glue-programming-python-di-transforms-maven"></a>

 Vous pouvez intégrer la dépendance des transformations à vos applications et distributions Spark (version 3.3) en ajoutant la dépendance du plug-in dans votre fichier Maven `pom.xml`, tout en développant vos applications Spark en local. 

```
<repositories>
   ...
    <repository>
        <id>aws-glue-etl-artifacts</id>
        <url>https://aws-glue-etl-artifacts.s3.amazonaws.com/release/ </url>
    </repository>
</repositories>
...
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>AWSGlueTransforms</artifactId>
    <version>4.0.0</version>
</dependency>
```

 Vous pouvez également télécharger les fichiers binaires directement depuis les artefacts de AWS Glue Maven et les inclure dans votre application Spark comme suit. 

```
#!/bin/bash
sudo wget -v https://aws-glue-etl-artifacts.s3.amazonaws.com/release/com/amazonaws/AWSGlueTransforms/4.0.0/AWSGlueTransforms-4.0.0.jar -P /usr/lib/spark/jars/
```