

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo del formato Avro in AWS Glue
<a name="aws-glue-programming-etl-format-avro-home"></a>

AWS Glue recupera i dati dalle fonti e li scrive su destinazioni archiviate e trasportate in vari formati di dati. Se i dati vengono archiviati o trasportati nel formato dati Avro, questo documento presenta le funzionalità disponibili per l'utilizzo dei dati in Glue. AWS 

AWS Glue supporta l'utilizzo del formato Avro. Questo formato è un formato dati basato su righe orientato alle prestazioni. Per un'introduzione al formato da parte dell'autorità degli standard, consulta la [Documentazione di Apache Avro 1.8.2](https://avro.apache.org/docs/1.8.2/).

Puoi usare AWS Glue per leggere file Avro da Amazon S3 e da sorgenti di streaming, nonché scrivere file Avro su Amazon S3. Puoi leggere e scrivere archivi `bzip2` e `gzip` contenenti file Avro da S3. Inoltre, è possibile scrivere archivi `deflate`, `snappy` e `xz` contenenti file Avro. Puoi configurare il comportamento di compressione sul [Parametri di connessione di S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) invece che nella configurazione discussa in questa pagina. 

La tabella seguente mostra quali operazioni comuni di AWS Glue supportano l'opzione di formato Avro.


| Lettura | Scrittura | Lettura in streaming | Gruppo di file piccoli | Segnalibri di processo | 
| --- | --- | --- | --- | --- | 
| Supportata | Supportata | Supportato\$1 | Non supportato. | Supportata | 

\$1 Supportato con restrizioni. Per ulteriori informazioni, consulta [Note e restrizioni per le origini di streaming Avro](add-job-streaming.md#streaming-avro-notes).

## Esempio: lettura di cartelle o file Avro da S3
<a name="aws-glue-programming-etl-format-avro-read"></a>

**Prerequisiti:** occorrono i percorsi S3 (`s3path`) nelle cartelle o nei file Avro da leggere. 

**Configurazione:** nelle opzioni della funzione, specifica `format="avro"`. In `connection_options`, utilizzare la chiave `paths` per specificare `s3path`. Puoi configurare il modo in cui il reader interagisce con S3 in `connection_options`. Per i dettagli, vedi Opzioni di formato dei dati per ingressi e uscite ETL in AWS Glue:. [Indicazioni di riferimento alle opzioni di connessione ad Amazon S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) Puoi configurare la modalità con cui il reader interpreta i file Avro CSV in `format_options`. Per i dettagli, consulta [Documentazione di riferimento della configurazione Avro](#aws-glue-programming-etl-format-avro-reference).

Il seguente script AWS Glue ETL mostra il processo di lettura dei file o delle cartelle Avro da S3: 

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

Per questo esempio, utilizzare il metodo [create\$1dynamic\$1frame.from\$1options](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 ]

[Per questo esempio, utilizzate l'operazione Format. getSourceWith](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()
  }
```

------

## Esempio: scrittura di file e cartelle Avro in S3
<a name="aws-glue-programming-etl-format-avro-write"></a>

**Prerequisiti:** è necessario un DataFrame (`dataFrame`) o DynamicFrame (`dynamicFrame`) inizializzato. È necessario anche del tuo percorso di output S3 previsto, `s3path`. 

**Configurazione:** nelle opzioni della funzione, specifica `format="avro"`. Nelle tue `connection_options`, utilizza la chiave `paths` per specificare `s3path`. È possibile modificare ulteriormente il modo in cui il writer interagisce con S3 nelle `connection_options`. Per i dettagli, vedi Opzioni di formato dei dati per ingressi e uscite ETL in AWS Glue:. [Indicazioni di riferimento alle opzioni di connessione ad Amazon S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) Puoi modificare la modalità con cui il writer interpreta i file Avro in `format_options`. Per i dettagli, consulta [Documentazione di riferimento della configurazione Avro](#aws-glue-programming-etl-format-avro-reference). 

Il seguente script AWS Glue ETL mostra il processo di scrittura di file o cartelle Avro su S3.

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

Per questo esempio, utilizza il metodo [write\$1dynamic\$1frame.from\$1options](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 ]

[Per questo esempio, utilizzate il metodo Format. getSinkWith](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)
  }
}
```

------

## Documentazione di riferimento della configurazione Avro
<a name="aws-glue-programming-etl-format-avro-reference"></a>

È possibile utilizzare i seguenti `format_options` valori ovunque specifichino le librerie AWS Glue`format="avro"`:
+ `version`— Speciifica la versione del reader/writer formato Apache Avro da supportare. Il valore predefinito è 1.7. Puoi specificare `format_options={"version": “1.8”}` per abilitare la lettura e la scrittura del tipo logico Avro. Per ulteriori informazioni, consulta [Specifiche di Apache Avro 1.7.7](https://avro.apache.org/docs/1.7.7/spec.html) e [Specifiche di Apache Avro 1.8.2](https://avro.apache.org/docs/1.8.2/spec.html).

  Il connettore Apache Avro 1.8 supporta le seguenti conversioni di tipo logico:

Per le operazioni di lettura: questa tabella mostra la conversione tra il tipo di dati Avro (tipo logico e tipo primitivo Avro) e il tipo di dati AWS Glue `DynamicFrame` per le operazioni di lettura Avro 1.7 e 1.8.


| Tipo di dati Avro: Tipo logico | Tipo di dati Avro: Tipi primitivi .NET | GlueDynamicFrame Tipo di dati:Avro Reader 1.7 | GlueDynamicFrame Tipo di dati: Avro Reader 1.8 | 
| --- | --- | --- | --- | 
| Decimale | bytes | BINARY | Decimale | 
| Decimale | fisso | BINARY | Decimale | 
| Data | int | INT | Data | 
| Tempo (millisecondi) | int | INT | INT | 
| Tempo (microsecondi) | Long | LONG | LONG | 
| Timestamp (millisecondi) | Long | LONG | Time stamp | 
| Timestamp (microsecondi) | Long | LONG | LONG | 
| Durata (non un tipo logico) | fisso di 12 | BINARY | BINARY | 

Per le operazioni di scrittura: questa tabella mostra la conversione tra il tipo di dati AWS Glue `DynamicFrame` e il tipo di dati Avro per le operazioni di scrittura Avro 1.7 e 1.8.


| Tipo di dati AWS Glue `DynamicFrame` | Tipo di dati Avro:Avro Writer 1.7 | Tipo di dati Avro:Avro Writer 1.8 | 
| --- | --- | --- | 
| Decimale | Stringa | decimal | 
| Data | Stringa | data | 
| Time stamp | Stringa | timestamp-micros | 

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

Per utilizzare Avro dall' DataFrame API Spark, devi installare il plug-in Spark Avro per la versione Spark corrispondente. La versione di Spark disponibile nel tuo job è determinata dalla versione di AWS Glue in uso. Per ulteriori informazioni sulle versioni di Spark, consulta [AWS Glue versioni](release-notes.md). Questo plugin è gestito da Apache; non forniamo garanzie specifiche sul supporto.

In AWS Glue 2.0, usa la versione 2.4.3 del plugin Spark Avro. Puoi trovare questo JAR su Maven Central, consulta [org.apache.spark:spark-avro\$12.12:2.4.3](https://search.maven.org/artifact/org.apache.spark/spark-avro_2.12/3.1.1/jar).

In AWS Glue 3.0, usa la versione 3.1.1 del plugin Spark Avro. Puoi trovare questo JAR su Maven Central, consulta [org.apache.spark:spark-avro\$12.12:3.1.1](https://search.maven.org/artifact/org.apache.spark/spark-avro_2.12/3.1.1/jar).

Per includere elementi aggiuntivi JARs in un lavoro AWS Glue ETL, utilizzate il parametro `--extra-jars` job. Per ulteriori informazioni sui parametri di processo, consulta [Utilizzo dei parametri del lavoro nei lavori AWS Glue](aws-glue-programming-etl-glue-arguments.md). Puoi configurare questo parametro anche nella Console di gestione AWS.