

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 CSV-Formats in AWS Glue
<a name="aws-glue-programming-etl-format-csv-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 CSV-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 CSV-Formats (Comma-Separated Value). Dieses Format ist ein minimales, zeilenbasiertes Datenformat. CSVs entsprechen oft nicht strikt einem Standard, aber weitere Informationen finden Sie in [RFC 4180 und [RFC](https://tools.ietf.org/html/rfc7111)](https://tools.ietf.org/html/rfc4180) 7111. 

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


| Lesen | Write (Schreiben) | Streaming gelesen | Gruppieren von kleinen Dateien | Auftrags-Lesezeichen | 
| --- | --- | --- | --- | --- | 
| Unterstützt | Unterstützt | Unterstützt | Unterstützt | Unterstützt | 

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

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

 **Konfiguration:** Geben Sie in Ihren Funktionsoptionen `format="csv"` an. Verwenden Sie in Ihrem `connection_options` den `paths`-Schlüssel, um `s3path` anzugeben. Sie können konfigurieren, wie der Reader mit S3 in `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 CSV-Dateien in Ihrem `format_options` interpretiert. Einzelheiten finden Sie unter [CSV-Konfigurationsreferenz](#aws-glue-programming-etl-format-csv-reference). 

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

 Wir bieten einen benutzerdefinierten CSV-Reader mit Leistungsoptimierungen für gängige Workflows über den `optimizePerformance`-Konfigurationsschlüssel. Um festzustellen, ob dieser Reader für Ihren Workload geeignet ist, lesen Sie [Optimieren der Leseleistung mit vektorisiertem SIMD-CSV-Leser](#aws-glue-programming-etl-format-simd-csv-reader). 

------
#### [ 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 CSV from S3
# For show, we handle a CSV with a header row.  Set the withHeader option.
# Consider whether optimizePerformance is right for your workflow.

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="csv",
    format_options={
        "withHeader": True,
        # "optimizePerformance": True,
    },
)
```

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

```
dataFrame = spark.read\
    .format("csv")\
    .option("header", "true")\
    .load("s3://s3path")
```

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

```
// Example: Read CSV from S3
// For show, we handle a CSV with a header row.  Set the withHeader option.
// Consider whether optimizePerformance 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)
    
    val dynamicFrame = glueContext.getSourceWithFormat(
      formatOptions=JsonOptions("""{"withHeader": true}"""),
      connectionType="s3",
      format="csv",
      options=JsonOptions("""{"paths": ["s3://s3path"], "recurse": true}""")
    ).getDynamicFrame()
  }
}
```

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

```
val dataFrame = spark.read
  .option("header","true")
  .format("csv")
  .load("s3://s3path“)
```

------

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

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

 **Konfiguration:** Geben Sie in Ihren Funktionsoptionen `format="csv"` an. Verwenden Sie in Ihrem `connection_options` den `paths`-Schlüssel, um `s3path` anzugeben. Sie können konfigurieren, wie der Writer mit S3 in `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 Ihre Operation den Inhalt Ihrer Dateien in `format_options` schreibt. Einzelheiten finden Sie unter [CSV-Konfigurationsreferenz](#aws-glue-programming-etl-format-csv-reference). Das folgende AWS -Glue-ETL-Skript zeigt den Prozess des Schreibens von CSV-Dateien und -Ordnern in 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).

```
# Example: Write CSV to S3
# For show, customize how we write string type values.  Set quoteChar to -1 so our values are not quoted.

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",
    connection_options={"path": "s3://s3path"},
    format="csv",
    format_options={
        "quoteChar": -1,
    },
)
```

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

```
dataFrame.write\
    .format("csv")\
    .option("quote", None)\
    .mode("append")\
    .save("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 CSV to S3
// For show, customize how we write string type values. Set quoteChar to -1 so our values are not quoted.

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

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

```
dataFrame.write
    .format("csv")
    .option("quote", null)
    .mode("Append")
    .save("s3://s3path")
```

------

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

Sie können Folgendes verwenden, `format_options` wo immer die AWS Glue-Bibliotheken dies angeben`format="csv"`: 
+ `separator` – Gibt das Trennzeichen an. Der Standardwert ist ein Komma, aber es kann jedes andere Zeichen angegeben werden.
  + **Typ:** Text, **Standard:** `","`
+ `escaper` – Gibt ein Zeichen an, das für die Maskierung verwendet werden soll. Diese Option wird nur beim Lesen von CSV-Dateien verwendet, nicht beim Schreiben. Wenn aktiviert, wird das unmittelbar folgende Zeichen unverändert verwendet, mit Ausnahme einiger bekannter Maskierungen (`\n`, `\r`, `\t` und `\0`).
  + **Typ:** Text, **Standard:** keine
+ `quoteChar` – Gibt das Zeichen für Anführungszeichen an. Der Standardwert ist ein doppeltes Anführungszeichen. Setzen Sie dies auf `-1`, um Anführungszeichen generell zu deaktivieren.
  + **Typ:** Text, **Standard:** `'"'`
+ `multiLine` – Gibt an, ob ein einzelner Datensatz mehrere Zeilen umfassen kann. Dies kommt vor, wenn ein Feld ein Neue-Zeile-Zeichen in Anführungszeichen enthält. Sie müssen diese Option auf "`True` setzen, wenn ein Datensatz mehrere Zeilen umfasst. Das Aktivieren von `multiLine` kann die Leistung verringern, da beim Parsen eine vorsichtigere Dateiaufteilung erforderlich ist.
  + **Typ:** Boolesch, **Standard:** `false`
+ `withHeader` – Gibt an, ob die erste Zeile als Kopfzeile behandelt werden soll. Diese Option kann in der `DynamicFrameReader`-Klasse verwendet werden.
  + **Typ:** Boolesch, **Standard:** `false`
+ `writeHeader` – Gibt an, ob die Kopfzeile ausgegeben werden soll. Diese Option kann in der `DynamicFrameWriter`-Klasse verwendet werden.
  + **Typ:** Boolesch, **Standard:** `true`
+ `skipFirst` – Gibt an, ob die erste Datenzeile übersprungen werden soll.
  + **Typ:** Boolesch, **Standard:** `false`
+ `optimizePerformance` – Gibt an, ob der erweiterte SIMD-CSV-Reader zusammen mit Apache-Arrow-basierten Spaltenspeicherformaten verwendet werden soll. Nur verfügbar in AWS Glue 3.0\$1.
  + **Typ:** Boolesch, **Standard:** `false`
+ `strictCheckForQuoting`— Beim Schreiben kann Glue Werte CSVs, die es als Zeichenketten interpretiert, in Anführungszeichen setzen. Dies geschieht, um Unklarheiten beim Ausschreiben zu vermeiden. Um bei der Entscheidung, was geschrieben werden soll, Zeit zu sparen, zitiert Glue möglicherweise in bestimmten Situationen, in denen Anführungszeichen nicht erforderlich sind. Durch die Aktivierung einer strengen Prüfung wird eine intensivere Berechnung durchgeführt und es werden nur Angebote erstellt, wenn dies unbedingt erforderlich ist. Nur verfügbar in AWS Glue 3.0\$1.
  + **Typ:** Boolesch, **Standard:** `false`

## Optimieren der Leseleistung mit vektorisiertem SIMD-CSV-Leser
<a name="aws-glue-programming-etl-format-simd-csv-reader"></a>

AWS Glue-Version 3.0 fügt einen optimierten CSV-Reader hinzu, der die Gesamtleistung des Auftrags im Vergleich zu zeilenbasierten CSV-Readern erheblich beschleunigen kann. 

 Der optimierte Reader:
+ Verwendet CPU-SIMD-Anweisungen zum Lesen von der Festplatte
+ Schreibt sofort Datensätze in einem Spaltenformat in den Speicher (Apache Arrow) 
+ Teilt die Datensätze in Batches auf

Dies spart Verarbeitungszeit, wenn die Datensätze später in Batches oder in ein Spaltenformat konvertiert werden sollen. Einige Beispiele sind das Ändern von Schemas oder das Abrufen von Daten nach Spalte. 

Um den optimierten Reader zu verwenden, setzen Sie `"optimizePerformance"` auf `true` in der `format_options`- oder Tabelleneigenschaft.

```
glueContext.create_dynamic_frame.from_options(
    frame = datasource1,
    connection_type = "s3", 
    connection_options = {"paths": ["s3://s3path"]}, 
    format = "csv", 
    format_options={
        "optimizePerformance": True, 
        "separator": ","
        }, 
    transformation_ctx = "datasink2")
```

**Einschränkungen für den vektorisierten CSV-Reader**  
Beachten Sie die folgenden Einschränkungen des vektorisierten CSV-Readers:
+ Die Formatoptionen `multiLine` und `escaper` werden nicht unterstützt. Es wird der Standard `escaper` doppelter Anführungszeichen `'"'` verwendet. Wenn diese Optionen festgelegt sind, fällt AWS Glue automatisch auf die Verwendung des zeilenbasierten CSV-Readers zurück.
+ Es unterstützt nicht das Erstellen eines DynamicFrame mit [ChoiceType](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-extensions-types.html#aws-glue-api-crawler-pyspark-extensions-types-awsglue-choicetype). 
+ Das Erstellen von [Datensätzen DynamicFrame mit Fehlern wird](https://docs.aws.amazon.com/glue/latest/dg/glue-etl-scala-apis-glue-dynamicframe-class.html#glue-etl-scala-apis-glue-dynamicframe-class-defs-errorsAsDynamicFrame) nicht unterstützt.
+ Das Lesen von CSV-Dateien mit Multibyte-Zeichen wie japanischen oder chinesischen Zeichen wird nicht unterstützt.