

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.

# Utilisation du format Avro dans Glue AWS
<a name="aws-glue-programming-etl-format-avro-home"></a>

AWS Glue récupère les données des sources et écrit les données sur des cibles stockées et transportées dans différents formats de données. Si vos données sont stockées ou transportées au format de données Avro, ce document présente les fonctionnalités disponibles pour utiliser vos données dans AWS Glue.

AWS Glue supporte l'utilisation du format Avro. Ce format est un format de données en colonnes et orienté vers la performance. Pour accéder à une présentation du format par l'autorité standard, consultez [ documentation Apache Avro 1.8.2 ](https://avro.apache.org/docs/1.8.2/).

Vous pouvez utiliser AWS Glue pour lire des fichiers Avro depuis Amazon S3 et depuis des sources de streaming, ainsi que pour écrire des fichiers Avro sur Amazon S3. Vous pouvez lire et écrire `bzip2` et `gzip`des archives contenant des fichiers Avro provenant de S3. De plus, vous pouvez écrire des archives `deflate`, `snappy` et `xz` contenant des fichiers Avro. Vous configurez le comportement de compression sur [Paramètres de connexion S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) plutôt que dans la configuration décrite sur cette page. 

Le tableau suivant indique quelles opérations AWS Glue courantes prennent en charge l'option de format Avro.


| Lecture | Écrire | Lecture en streaming | Groupement des petits fichiers | Signets de tâche | 
| --- | --- | --- | --- | --- | 
| Pris en charge | Pris en charge | Pris en charge\* | Non pris en charge | Pris en charge | 

\* Pris en charge avec des restrictions. Pour de plus amples informations, veuillez consulter [Notes et restrictions pour les sources en streaming Avro](add-job-streaming.md#streaming-avro-notes).

## Exemple : lecture de fichiers Avro ou de dossiers de S3
<a name="aws-glue-programming-etl-format-avro-read"></a>

**Prérequis :** vous aurez besoin des chemins S3 (`s3path`) vers des fichiers ou dossiers Avro que vous souhaitez lire. 

**Configuration :** dans vos options de fonction, spécifiez `format="avro"`. Dans vos `connection_options`, utilisez la clé `paths` pour spécifier `s3path`. Vous pouvez configurer la manière dont le lecteur interagit avec S3 dans les `connection_options`. Pour plus de détails, voir Options de format de données pour les entrées et sorties ETL dans AWS Glue :[Référence des options de connexion Amazon S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). Vous pouvez configurer la manière dont le lecteur interprète les fichiers Avro dans votre `format_options`. Pour plus d'informations, consultez .[Référence de configuration Avro](#aws-glue-programming-etl-format-avro-reference).

Le script AWS Glue ETL suivant montre le processus de lecture de fichiers ou de dossiers Avro depuis S3 : 

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [create\_dynamic\_frame.from\_options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_options).

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

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

dynamicFrame = glueContext.create_dynamic_frame.from_options(
    connection_type="s3",
    connection_options={"paths": ["s3://{{s3path}}"]},
    format="avro"
)
```

------
#### [ Scala ]

Pour cet exemple, utilisez l'opération [getSourceWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSourceWithFormat).

```
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.GlueContext
import org.apache.spark.sql.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)

    val dynamicFrame = glueContext.getSourceWithFormat(
      connectionType="s3",
      format="avro",
      options=JsonOptions("""{"paths": ["s3://{{s3path}}"]}""")
    ).getDynamicFrame()
  }
```

------

## Exemple : écriture de fichiers et dossiers Avro dans S3
<a name="aws-glue-programming-etl-format-avro-write"></a>

**Prérequis :** Vous aurez besoin d'un initialisé DataFrame (`dataFrame`) ou DynamicFrame (`dynamicFrame`). Vous aurez également besoin de votre chemin de sortie S3, `s3path`. 

**Configuration :** dans vos options de fonction, spécifiez `format="avro"`. Dans vos `connection_options`, utilisez la clé `paths` pour spécifier votre `s3path`. Vous pouvez modifier davantage la manière dont le scripteur interagit avec S3 dans les `connection_options`. Pour plus de détails, voir Options de format de données pour les entrées et sorties ETL dans AWS Glue :[Référence des options de connexion Amazon S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). Vous pouvez modifier la façon dont le rédacteur interprète les fichiers Avro dans votre `format_options`. Pour plus d'informations, consultez .[Référence de configuration Avro](#aws-glue-programming-etl-format-avro-reference). 

Le script AWS Glue ETL suivant montre le processus d'écriture de fichiers ou de dossiers Avro dans S3.

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [write\_dynamic\_frame.from\_options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-write_dynamic_frame_from_options).

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

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

glueContext.write_dynamic_frame.from_options(
    frame={{dynamicFrame}},
    connection_type="s3",
    format="avro",
    connection_options={
        "path": "s3://{{s3path}}"
    }
)
```

------
#### [ Scala ]

Pour cet exemple, utilisez la méthode [getSinkWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSinkWithFormat).

```
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.{DynamicFrame, GlueContext}
import org.apache.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)

    glueContext.getSinkWithFormat(
      connectionType="s3",
      options=JsonOptions("""{"path": "s3://{{s3path}}"}"""),
      format="avro"
    ).writeDynamicFrame({{dynamicFrame}})
  }
}
```

------

## Référence de configurations Avro
<a name="aws-glue-programming-etl-format-avro-reference"></a>

Vous pouvez utiliser les `format_options` valeurs suivantes partout où les bibliothèques AWS Glue le spécifient `format="avro"` :
+ `version`— Spécifie la version du reader/writer format Apache Avro à prendre en charge. La valeur par défaut est 1.7. Vous pouvez spécifier `format_options={"version": “1.8”}` pour activer la lecture et l'écriture d'un type logique Avro. Pour plus d'informations, consultez les [spécifications Apache Avro 1.7.7](https://avro.apache.org/docs/1.7.7/spec.html) et les [spécifications Apache Avro 1.8.2](https://avro.apache.org/docs/1.8.2/spec.html).

  Le connecteur Apache Avro 1.8 prend en charge les conversions de type logique suivantes :

Pour le lecteur : ce tableau montre la conversion entre le type de données Avro (type logique et type primitif Avro) et le type de données AWS Glue `DynamicFrame` pour le lecteur Avro 1.7 et 1.8.


| Type de données Avro : Type logique | Type de données Avro : Type Avro primitif | GlueDynamicFrame Type de données :Avro Reader 1.7 | GlueDynamicFrame Type de données : Avro Reader 1.8 | 
| --- | --- | --- | --- | 
| Décimal | octets | BINAIRE | Décimal | 
| Décimal | corrigé(e)(s) | BINAIRE | Décimal | 
| Date | int | INT | Date | 
| Temps (milliseconde) | int | INT | INT | 
| Temps (microseconde) | long | LONG | LONG | 
| Horodatage (milliseconde) | long | LONG | Horodatage | 
| Horodatage (microseconde) | long | LONG | LONG | 
| Durée (pas un type logique) | corrigé(e)(s) sur 12 | BINAIRE | BINAIRE | 

Pour le dispositif d'écriture : ce tableau affiche la conversion entre le type de données AWS Glue `DynamicFrame` et le type de données Avro pour le dispositif d'écriture Avro 1.7 et 1.8.


| Type de données AWS Glue `DynamicFrame` | Type de données Avro :Avro Writer 1.7 | Type de données Avro :Avro Writer 1.8 | 
| --- | --- | --- | 
| Décimal | String | decimal | 
| Date | String | date | 
| Horodatage | String | timestamp-micros | 

## Assistance Avro Spark DataFrame
<a name="aws-glueprogramming-etl-format-avro-dataframe-support"></a>

Pour utiliser Avro depuis l' DataFrame API Spark, vous devez installer le plugin Spark Avro pour la version de Spark correspondante. La version de Spark disponible dans votre tâche est déterminée par votre version de AWS Glue. Pour plus d'informations sur les versions Spark, consultez [AWS Glue versions](release-notes.md). Ce plugin est maintenu par Apache, nous ne donnons pas de garanties spécifiques de support.

Dans AWS Glue 2.0, utilisez la version 2.4.3 du plugin Spark Avro. Vous pouvez trouver ce fichier JAR sur Maven Central, voir[org.apache.spark:spark-avro\_2.12:2.4.3](https://search.maven.org/artifact/org.apache.spark/spark-avro_2.12/3.1.1/jar).

Dans AWS Glue 3.0, utilisez la version 3.1.1 du plugin Spark Avro. Vous pouvez trouver ce fichier JAR sur Maven Central, voir[org.apache.spark : spark-avro\_2.12:3.1.1](https://search.maven.org/artifact/org.apache.spark/spark-avro_2.12/3.1.1/jar).

Pour inclure des éléments supplémentaires JARs dans une tâche AWS Glue ETL, utilisez le paramètre `--extra-jars` job. 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). Vous pouvez également configurer ce paramètre dans AWS Management Console.