

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Verwenden des Avro-Formats in Glue AWS
<a name="aws-glue-programming-etl-format-avro-home"></a>

AWS Glue ruft Daten aus Quellen ab und schreibt Daten auf Ziele, die in verschiedenen Datenformaten gespeichert und transportiert werden. Wenn Ihre Daten im Avro-Datenformat gespeichert oder transportiert werden, werden Ihnen in diesem Dokument die verfügbaren Funktionen für die Verwendung Ihrer Daten in AWS Glue vorgestellt.

AWS Glue unterstützt die Verwendung des Avro-Formats. Dieses Format ist ein leistungsorientiertes, zeilenbasiertes Datenformat. Eine Einführung in das Format durch die Standardautorität finden Sie unter der [Apache-Avro 1.8.2 Dokumentation](https://avro.apache.org/docs/1.8.2/).

Sie können AWS Glue verwenden, um Avro-Dateien von Amazon S3 und aus Streaming-Quellen zu lesen sowie Avro-Dateien auf Amazon S3 zu schreiben. Sie können `bzip2`- und `gzip`-Archive mit Avro-Dateien aus S3 lesen und schreiben. Darüber hinaus können Sie `deflate`-, `snappy`-, und `xz`-Archive schreiben, die Avro-Dateien enthalten. Sie konfigurieren das Komprimierungsverhalten auf [S3-Verbindungsparameter](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) statt in der auf dieser Seite besprochenen Konfiguration. 

Die folgende Tabelle zeigt, welche gängigen AWS Glue-Operationen die Avro-Formatoption unterstützen.


| Lesen | Write (Schreiben) | Streaming gelesen | Gruppieren von kleinen Dateien | Auftrags-Lesezeichen | 
| --- | --- | --- | --- | --- | 
| Unterstützt | Unterstützt | Unterstützt\$1 | Nicht unterstützt | Unterstützt | 

\$1Mit Einschränkungen unterstützt. Weitere Informationen finden Sie unter [Hinweise und Einschränkungen für Avro-Streaming-Quellen](add-job-streaming.md#streaming-avro-notes).

## Beispiel: Lesen von Avro-Dateien oder Ordnern aus S3
<a name="aws-glue-programming-etl-format-avro-read"></a>

** Voraussetzungen:** Sie benötigen die S3-Pfade (`s3path`) zu den Avro-Dateien oder Ordnern, die Sie lesen möchten. 

**Konfiguration:** Geben Sie in Ihren Funktionsoptionen `format="avro"` an. Verwenden Sie in Ihrem `connection_options` den `paths`-Schlüssel, um `s3path` anzugeben. Sie können konfigurieren, wie der Reader mit S3 in der `connection_options` interagiert. Einzelheiten finden Sie unter Datenformatoptionen für ETL-Eingaben und -Ausgaben in AWS Glue:[Referenz zur Amazon-S3-Verbindungsoption](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). Sie können konfigurieren, wie der Reader Avro-Dateien in Ihrem `format_options` interpretiert. Einzelheiten finden Sie in der [Avro-Konfigurationsreferenz](#aws-glue-programming-etl-format-avro-reference).

Das folgende AWS Glue-ETL-Skript zeigt den Vorgang des Lesens von Avro-Dateien oder -Ordnern aus S3: 

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

Verwenden Sie für dieses Beispiel die Methode [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 ]

Verwenden Sie für dieses Beispiel die Operation [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()
  }
```

------

## Beispiel: Schreiben von Avro-Dateien und -Ordnern in S3
<a name="aws-glue-programming-etl-format-avro-write"></a>

**Voraussetzungen:** Sie benötigen ein initialisiertes DataFrame (`dataFrame`) oder DynamicFrame (`dynamicFrame`). Sie benötigen auch Ihren erwarteten S3-Ausgabepfad, `s3path`. 

**Konfiguration:** Geben Sie in Ihren Funktionsoptionen `format="avro"` an. Verwenden Sie in Ihrem `connection_options` den `paths`-Schlüssel, um Ihren `s3path` anzugeben. Sie können die Art und Weise, wie der Writer mit S3 in `connection_options` interagiert, weiter verändern. Einzelheiten finden Sie unter Datenformatoptionen für ETL-Eingaben und -Ausgaben in AWS Glue:[Referenz zur Amazon-S3-Verbindungsoption](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). Sie können ändern, wie der Schreiber Avro-Dateien in Ihren `format_options` interpretiert. Einzelheiten finden Sie in der [Avro-Konfigurationsreferenz](#aws-glue-programming-etl-format-avro-reference). 

Das folgende AWS Glue-ETL-Skript zeigt den Vorgang des Schreibens von Avro-Dateien oder -Ordnern nach S3.

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

Verwenden Sie für dieses Beispiel die Methode [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 ]

Verwenden Sie für dieses Beispiel die [getSinkWithFormat-Methode](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)
  }
}
```

------

## Avro-Konfigurationsreferenz
<a name="aws-glue-programming-etl-format-avro-reference"></a>

Sie können die folgenden `format_options` Werte überall dort verwenden, wo AWS Glue-Bibliotheken dies angeben`format="avro"`:
+ `version`— Gibt die Version des Apache reader/writer Avro-Formats an, die unterstützt werden soll. Der Standardwert ist "1.7". Sie können `format_options={"version": “1.8”}` angeben, um das Lesen und Schreiben des logischen Avro-Typs zu ermöglichen. Weitere Informationen finden Sie unter [Apache Avro 1.7.7 Specification](https://avro.apache.org/docs/1.7.7/spec.html) und [Apache Avro 1.8.2 Specification](https://avro.apache.org/docs/1.8.2/spec.html).

  Der Apache Avro 1.8-Konnektor unterstützt die folgenden Konvertierungen für logische Typen:

Für den Reader zeigt diese Tabelle die Konvertierung zwischen Avro-Datentyp (logischer Typ und primitiver Avro-Typ) und dem Datentyp AWS Glue `DynamicFrame` für Avro Reader 1.7 und 1.8 an.


| Avro-Datentyp: Logischer Typ | Avro-Datentyp: Primitiver Avro-Typ | GlueDynamicFrame Datentyp:Avro Reader 1.7 | GlueDynamicFrame Datentyp: Avro Reader 1.8 | 
| --- | --- | --- | --- | 
| Dezimal | bytes | BINARY | Dezimal | 
| Dezimal | Fixed | BINARY | Dezimal | 
| Date | int | INT | Date | 
| Zeit (Millisekunde) | int | INT | INT | 
| Zeit (Mikrosekunde) | long | LONG | LONG | 
| Zeitstempel (Millisekunde) | long | LONG | Zeitstempel | 
| Zeitstempel (Mikrosekunde) | long | LONG | LONG | 
| Dauer (kein logischer Typ) | Fixed von 12 | BINARY | BINARY | 

Für Writer zeigt diese Tabelle die Konvertierung zwischen dem Datentyp AWS Glue `DynamicFrame` und dem Avro-Datentyp für Avro Writer 1.7 und 1.8 an.


| AWS GlueDatentyp`DynamicFrame` | Avro-Datentyp:Avro Writer 1.7 | Avro-Datentyp:Avro Writer 1.8 | 
| --- | --- | --- | 
| Dezimal | Zeichenfolge | Dezimalwert | 
| Date | Zeichenfolge | date | 
| Zeitstempel | Zeichenfolge | timestamp-micros | 

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

Um Avro über die DataFrame Spark-API verwenden zu können, müssen Sie das Spark Avro-Plugin für die entsprechende Spark-Version installieren. Welche Version von Spark in Ihrem Job verfügbar ist, hängt von Ihrer AWS Glue-Version ab. Weitere Informationen zu den Spark-Versionen erhalten Sie unter [AWS Glue Versionen](release-notes.md). Dieses Plugin wird von Apache verwaltet, wir geben keine spezifischen Garantien für den Support.

Verwenden AWS Sie in Glue 2.0 Version 2.4.3 des Spark Avro-Plugins. Sie finden dieses JAR auf Maven Central, siehe [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).

Verwenden AWS Sie in Glue 3.0 Version 3.1.1 des Spark Avro-Plugins. Sie finden dieses JAR auf Maven Central, siehe [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).

Verwenden Sie den Job-Parameter, um zusätzliche Elemente JARs in einen AWS `--extra-jars` Glue-ETL-Job aufzunehmen. Informationen zu Auftragsparametern finden Sie unter [Verwenden von Auftragsparametern in AWS Glue-Jobs](aws-glue-programming-etl-glue-arguments.md). Sie können diesen Parameter auch in AWS-Managementkonsole konfigurieren.