

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.

# Das Parkett-Format in AWS Glue verwenden
<a name="aws-glue-programming-etl-format-parquet-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 Parquet-Datenformat gespeichert oder transportiert werden, stellt Ihnen dieses Dokument die verfügbaren Funktionen für die Verwendung Ihrer Daten in AWS Glue vor. 

AWS Glue unterstützt die Verwendung des Parquet-Formats. Dieses Format ist ein leistungsorientiertes, spaltenbasiertes Datenformat. Eine Einführung in das Format durch die Standardautorität finden Sie unter [Dokumentationsübersicht zu Apache-Parquet](https://parquet.apache.org/docs/overview/).

Sie können AWS Glue verwenden, um Parquet-Dateien von Amazon S3 und aus Streaming-Quellen zu lesen sowie Parquet-Dateien auf Amazon S3 zu schreiben. Sie können `bzip`- und `gzip`-Archive mit Parquet-Dateien aus S3 lesen und schreiben. 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 Funktionen von AWS Glue die Formatoption Parquet unterstützen.


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

\$1 Wird in AWS Glue Version 1.0\$1 unterstützt

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

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

 **Konfiguration:** Geben Sie in Ihren Funktionsoptionen `format="parquet"` an. Verwenden Sie in Ihrem `connection_options` den `paths`-Schlüssel, um Ihren `s3path` anzugeben. 

Sie können konfigurieren, wie der Reader mit S3 in der `connection_options` interagiert. Einzelheiten finden Sie unter Verbindungstypen und Optionen für ETL in AWS Glue:[S3-Verbindungsparameter](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3).

 Sie können konfigurieren, wie der Reader Parquet-Dateien in Ihrem `format_options` interpretiert. Details dazu finden Sie unter [Parquet-Konfigurationsreferenz](#aws-glue-programming-etl-format-parquet-reference).

Das folgende AWS Glue-ETL-Skript zeigt den Vorgang des Lesens von Parquet-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).

```
# Example: Read Parquet from S3

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

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

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

Sie können es auch DataFrames in einem Skript (`pyspark.sql.DataFrame`) verwenden.

```
dataFrame = spark.read.parquet("s3://s3path/")
```

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

Verwenden Sie für dieses Beispiel die [getSourceWithFormat-Methode](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSourceWithFormat).

```
// Example: Read Parquet from S3

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)
    
    val dynamicFrame = glueContext.getSourceWithFormat(
      connectionType="s3",
      format="parquet",
      options=JsonOptions("""{"paths": ["s3://s3path"]}""")
    ).getDynamicFrame()
  }
}
```

Sie können auch DataFrames in einem Skript (`org.apache.spark.sql.DataFrame`) verwenden.

```
spark.read.parquet("s3://s3path/")
```

------

## Beispiel: Schreiben von Parquet-Dateien und -Ordnern nach S3
<a name="aws-glue-programming-etl-format-parquet-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="parquet"` an. Verwenden Sie in Ihrem `connection_options` den `paths`-Schlüssel, um `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 Verbindungstypen und Optionen für ETL in AWS Glue:[S3-Verbindungsparameter](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). Sie können konfigurieren, wie Ihre Operation den Inhalt Ihrer Dateien in `format_options` schreibt. Details dazu finden Sie unter [Parquet-Konfigurationsreferenz](#aws-glue-programming-etl-format-parquet-reference).

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

Wir bieten über den `useGlueParquetWriter` Konfigurationsschlüssel einen benutzerdefinierten Parquet-Writer mit Leistungsoptimierungen für DynamicFrames. Um festzustellen, ob dieser Writer für Ihren Workload geeignet ist, lesen Sie [Glue-Parquet-Writer](#aws-glue-programming-etl-format-glue-parquet-writer). 

------
#### [ 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).

```
# Example: Write Parquet to S3
# Consider whether useGlueParquetWriter is right for your workflow.

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="parquet",
    connection_options={
        "path": "s3://s3path",
    },
    format_options={
        # "useGlueParquetWriter": True,
    },
)
```

Sie können es auch DataFrames in einem Skript (`pyspark.sql.DataFrame`) verwenden.

```
df.write.parquet("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).

```
// Example: Write Parquet to S3
// Consider whether useGlueParquetWriter is right for your workflow.

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="parquet"
    ).writeDynamicFrame(dynamicFrame)
  }
}
```

Sie können auch DataFrames in einem Skript (`org.apache.spark.sql.DataFrame`) verwenden.

```
df.write.parquet("s3://s3path/")
```

------

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

Sie können Folgendes verwenden, `format_options` wo immer die AWS Glue-Bibliotheken dies angeben`format="parquet"`: 
+ `useGlueParquetWriter`— Gibt die Verwendung eines benutzerdefinierten Parquet-Writers an, der Leistungsoptimierungen für DynamicFrame Workflows bietet. Einzelheiten zur Verwendung finden Sie unter [Glue-Parquet-Writer](#aws-glue-programming-etl-format-glue-parquet-writer). 
  + **Typ:** Boolesch, **Standard:**`false`
+ `compression` – Gibt den verwendeten Komprimierungs-Codec an. Werte sind voll kompatibel mit `org.apache.parquet.hadoop.metadata.CompressionCodecName`. 
  + **Typ:** Aufzählungstext, **Standard:** `"snappy"`
  + Werte: `"uncompressed"`, `"snappy"`, `"gzip"` und `"lzo"`
+ `blockSize` – Gibt die Größe einer im Arbeitsspeicher gepufferten Zeilengruppe in Bytes an. Sie verwenden dies, um die Leistung zu optimieren. Die Größe sollte sich genau in eine Anzahl von Megabyte teilen.
  + **Typ:** Numerisch, **Standard:**`134217728`
  + Der Standardwert ist gleich 128 MB.
+ `pageSize` – Gibt die Größe einer Seite in Byte an. Sie verwenden dies, um die Leistung zu optimieren. Eine Seite ist die kleinste Einheit, die vollständig gelesen werden muss, um auf einen einzelnen Datensatz zugreifen zu können.
  + **Typ:** Numerisch, **Standard:**`1048576`
  + Der Standardwert ist gleich 1 MB.

**Anmerkung**  
Es können zusätzlich alle Optionen, die vom zugrunde liegenden SparkSQL-Code akzeptiert werden, im Rahmen des `connection_options`-Map-Parameters in dieses Format übergeben werden. Zum Beispiel kann eine Spark-Konfiguration wie [mergeSchema](https://spark.apache.org/docs/latest/sql-data-sources-parquet.html#schema-merging) für den AWS Glue Spark-Reader so eingestellt werden, dass das Schema für alle Dateien zusammengeführt wird.

## Optimieren Sie die Schreibleistung mit dem AWS Glue Parquet Writer
<a name="aws-glue-programming-etl-format-glue-parquet-writer"></a>

**Anmerkung**  
 Der AWS Glue Parquet-Writer wurde in der Vergangenheit über den `glueparquet` Formattyp aufgerufen. Dieses Zugriffsmuster wird nicht mehr befürwortet. Verwenden Sie stattdessen den `parquet`-Typ mit aktiviertem `useGlueParquetWriter`. 

Der AWS Glue Parquet-Writer verfügt über Leistungsverbesserungen, die schnellere Schreibvorgänge in Parquet-Dateien ermöglichen. Der traditionelle Writer berechnet vor dem Schreiben ein Schema. Das Parquet-Format speichert das Schema nicht in einer schnell abrufbaren Form, daher kann dies einige Zeit dauern. Mit dem AWS Glue Parquet Writer ist kein vorberechnetes Schema erforderlich. Der Writer berechnet und modifiziert das Schema dynamisch, sobald Daten eingehen.

Beachten Sie die folgenden Einschränkungen, wenn Sie `useGlueParquetWriter` angeben:
+ Der Writer unterstützt nur die Schemaentwicklung (z. B. das Hinzufügen oder Entfernen von Spalten), aber nicht das Ändern von Spaltentypen, wie bei `ResolveChoice`.
+ Der Writer unterstützt kein leeres Schreiben, z. DataFrames B. um eine reine Schemadatei zu schreiben. Bei der Integration mit dem AWS Glue-Datenkatalog per Einstellung wird der Datenkatalog nicht aktualisiert`enableUpdateCatalog=True`, wenn versucht DataFrame wird, ein leeres Feld zu schreiben. Dies führt dazu, dass im Datenkatalog eine Tabelle ohne Schema erstellt wird.

Wenn Ihre Transformation diese Einschränkungen nicht erfordert, sollte das Einschalten des AWS Glue Parquet-Writers die Leistung erhöhen.