

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.

# Erstellen einer benutzerdefinierten Transformation
<a name="transforms-custom"></a>

Wenn Sie kompliziertere Transformationen für Ihre Daten durchführen müssen oder dem Datensatz Dateneigenschaftsschlüssel hinzufügen möchten, können Sie eine Transformation für **benutzerdefinierten Code (Custom code)** im Auftragsdiagramm hinzufügen. Mit dem Knoten „Custom code“ können Sie ein Skript eingeben, das die Transformation durchführt. 

Wenn Sie benutzerdefinierten Code verwenden, müssen Sie die Änderungen, die durch den benutzerdefinierten Code an der Ausgabe vorgenommen werden, mit einem Schema-Editor angeben. Beim Bearbeiten des Schemas können Sie:
+ Dateneigenschaftsschlüssel hinzufügen oder entfernen;
+ den Datentyp von Dateneigenschaftsschlüsseln ändern;
+ den Namen von Dateneigenschaftsschlüsseln ändern;
+ einen verschachtelten Eigenschaftsschlüssel umstrukturieren.

Sie müssen eine *SelectFromCollection*Transformation verwenden, um eine einzelne `DynamicFrame` aus dem Ergebnis Ihres benutzerdefinierten Transformationsknotens auszuwählen, bevor Sie die Ausgabe an einen Zielort senden können. 

Mit den folgenden Aufgaben können Sie dem Auftragsdiagramm einen benutzerdefinierten Transformationsknoten hinzufügen.

## Hinzufügen eines Transformationsknotens mit benutzerdefiniertem Code zum Auftragsdiagramm
<a name="transforms-custom-addnode"></a>

**Dem Auftragsdiagramm einen benutzerdefinierten Transformationsknoten hinzufügen**

1. (Optional) Öffnen Sie das Bedienfeld Ressourcen und wählen Sie **Benutzerdefinierte Transformation** aus, um Ihrem Auftragsdiagramm eine benutzerdefinierte Transformation hinzuzufügen. 

1. Geben Sie auf der Registerkarte **Node properties (Knoteneigenschaften)** einen Namen für den Knoten im Auftragsdiagramm ein. Falls noch kein übergeordneter Knoten ausgewählt ist oder Sie mehrere Eingaben für die benutzerdefinierte Transformation wünschen, wählen Sie in der Liste **Node parents (Übergeordnete Knoten)** einen Knoten aus, der als Eingabequelle für die Transformation verwendet werden soll.

## Eingabe von Code für den benutzerdefinierten Transformationsknoten
<a name="transforms-custom-addcode"></a>

Sie können Code in ein Eingabefeld eingeben oder einfügen. Der Auftrag verwendet diesen Code für die Datentransformation. Sie können einen Codeausschnitt entweder in Python oder Scala bereitstellen. Der Code sollte einen oder mehrere `DynamicFrames` als Eingabe nehmen und mehrere `DynamicFrames` zurückgeben. 

**Das Skript für einen benutzerdefinierten Transformationsknoten eingeben**

1. Wenn der benutzerdefinierte Transformationsknoten im Auftragsdiagramm ausgewählt ist, wählen Sie die Registerkarte **Transform (Transformation)** aus. 

1. Im Texteingabefeld unter der Überschrift **Code block (Code-Block)** fügen bzw. geben Sie den Code für die Transformation ein. Der Code, den Sie verwenden, muss zur Sprache passen, die auf der Registerkarte **Job details (Auftragsdetails)** für den Auftrag angegeben ist.

   Wenn sich AWS Glue Studio auf die Eingabeknoten in Ihrem Code bezieht, benennt es die von den Auftragsdiagrammknoten zurückgegebenen `DynamicFrames` in der Reihenfolge der Erstellung. Verwenden Sie eines der folgenden Benennungsmethoden in Ihrem Code:
   + Klassische Codegenerierung — Verwenden Sie Funktionsnamen, um auf die Knoten in Ihrem Job-Diagramm zu verweisen.
     + Datenquellknoten: `DataSource0`, `DataSource1`, `DataSource2` usw.
     + Transformationsknoten: `Transform0`, `Transform1`, `Transform2` usw.
   + Neue Codegenerierung — Verwenden Sie den Namen, der auf der Registerkarte **Node properties (Knoteneigenschaften)** angegeben ist, angehängt mit '`_node1`','`_node2`', usw. Zum Beispiel: `S3bucket_node1`, `ApplyMapping_node2`, `S3bucket_node2`, `MyCustomNodeName_node1`.

   Weitere Informationen zum neuen Codegenerator finden Sie unter [Generierung des Skript-Code](job-editor-features.md#code-gen).

Die folgenden Beispiele zeigen das Format des Codes, der in das Codefeld eingegeben werden soll:

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

Im folgenden Beispiel wird der erste erhaltene `DynamicFrame` zu einem `DataFrame` konvertiert, um die native Filtermethode anzuwenden (wobei nur Akten mit mehr als 1000 Stimmen beibehalten werden), und anschließend zurück zu einem `DynamicFrame` konvertiert und zurückgegeben.

```
def FilterHighVoteCounts (glueContext, dfc) -> DynamicFrameCollection:
    df = dfc.select(list(dfc.keys())[0]).toDF()
    df_filtered = df.filter(df["vote_count"] > 1000)
    dyf_filtered = DynamicFrame.fromDF(df_filtered, glueContext, "filter_votes")
    return(DynamicFrameCollection({"CustomTransform0": dyf_filtered}, glueContext))
```

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

Im folgenden Beispiel wird der erste erhaltene `DynamicFrame` zu einem `DataFrame` konvertiert, um die native Filtermethode anzuwenden (wobei nur Akten mit mehr als 1000 Stimmen beibehalten werden), und anschließend zurück zu einem `DynamicFrame` konvertiert und zurückgegeben.

```
object FilterHighVoteCounts {
  def execute(glueContext : GlueContext, input : Seq[DynamicFrame]) : Seq[DynamicFrame] = {
    val frame = input(0).toDF()
    val filtered = DynamicFrame(frame.filter(frame("vote_count") > 1000), glueContext)
    Seq(filtered)
  }
}
```

------

## Bearbeiten des Schemas in einem benutzerdefinierten Transformationsknoten
<a name="transforms-custom-editschema"></a>

Wenn Sie einen benutzerdefinierten Transformationsknoten verwenden, kann AWS Glue Studio die von der Transformation erstellten Ausgabeschemata nicht automatisch ableiten. Sie verwenden den Schema-Editor, um die Schemaänderungen zu beschreiben, die vom benutzerdefinierten Transformationscode eingeführt werden.

Ein benutzerdefinierter Code-Knoten kann eine beliebige Anzahl von übergeordneten Knoten haben, die jeweils einen `DynamicFrame` als Eingabe für Ihren benutzerdefinierten Code bereitstellen. Ein benutzerdefinierter Code-Knoten gibt eine Sammlung von `DynamicFrames` zurück. Jeder `DynamicFrame`, der als Eingabe verwendet wird, besitzt ein zugehöriges Schema. Sie müssen ein Schema hinzufügen, das jeden einzelnen `DynamicFrame` beschreibt, der vom benutzerdefinierten Code-Knoten zurückgegeben wird. 

**Anmerkung**  
 Wenn Sie Ihr eigenes Schema für eine benutzerdefinierte Transformation festlegen, erbt AWS Glue Studio keine Schemas von früheren Knoten. Um das Schema zu aktualisieren, wählen Sie den Knoten „Benutzerdefinierte Transformation“ aus und wählen Sie dann die Registerkarte „Datenvorschau“. Sobald die Vorschau generiert wurde, wählen Sie „Vorschau-Schema verwenden“. Das Schema wird dann mithilfe der Vorschaudaten durch das Schema ersetzt. 

**Die Ausgabeschemata für einen benutzerdefinierten Transformationsknoten bearbeiten**

1. Wenn der benutzerdefinierte Transformationsknoten im Auftragsdiagramm ausgewählt ist, wählen Sie im Bereich mit den Knotendetails die Registerkarte **Output schema (Ausgabeschema)** aus. 

1. Wählen Sie **Edit (Bearbeiten)** aus, um Änderungen am Schema vorzunehmen. 

   Wenn Sie verschachtelte Dateneigenschaftsschlüssel haben, z. B. ein Array oder ein Objekt, können Sie mit dem Symbol für **Expand-Rows (Zeilen ausklappen)** (![\[\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/expand-rows-icon.png)) oben rechts in den Schemafenstern die Liste der untergeordneten Dateneigenschaftsschlüssel ausklappen. Nachdem Sie dieses Symbol ausgewählt haben, ändert es sich zu **Collapse-Rows (Zeilen zuklappen)** (![\[\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/collapse-rows-icon.png)), mit dem Sie die Liste der untergeordneten Eigenschaftsschlüssel zuklappen können.

1. Ändern Sie das Schema mithilfe der folgenden Aktionen im Abschnitt rechts auf der Seite:
   + Um einen Eigenschaftenschlüssel umzubenennen, bewegen Sie den Cursor in das Textfeld **Key (Schlüssel)** des jeweiligen Eigenschaftenschlüssels und geben Sie dann den neuen Namen ein.
   + Um den Datentyp eines Eigenschaftsschlüssels zu ändern, wählen Sie den neuen Datentyp für den Eigenschaftsschlüssel aus der Liste aus.
   + Um dem Schema einen neuen obersten Eigenschaftsschlüssel hinzuzufügen, wählen Sie das Symbol für **Overflow (Überlauf)** (![\[\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/edit-schema-actions-button.png)) links von der Schaltfläche **Cancel (Abbrechen)** aus und dann **Add root key (Rootschlüssel hinzufügen)**.
   + Um dem Schema einen untergeordneten Eigenschaftsschlüssel hinzuzufügen, wählen Sie das Symbol für **Add-Key (Schlüssel hinzufügen)** (![\[\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/filter-add-icon.png)) aus, das mit dem übergeordneten Schlüssel verknüpft ist. Geben Sie einen Namen für den untergeordneten Schlüssel ein und wählen Sie den Datentyp aus.
   + Um einen Eigenschaftsschlüssel aus dem Schema zu entfernen, wählen Sie das Symbol zum **Löschen (Remove)** (![\[\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/delete-icon-black.png)) ganz rechts neben dem Schlüsselnamen aus. 

1. Wenn Ihr benutzerdefinierter Transformationscode mehrere `DynamicFrames` verwendet, können Sie zusätzliche Ausgabeschemata hinzufügen. 
   + Um ein neues leeres Schema hinzuzufügen, wählen Sie das Symbol für **Overflow (Überfluss)** (![\[\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/edit-schema-actions-button.png)) und anschließend **Add output schema (Ausgabeschema hinzufügen)** aus.
   + Um ein vorhandenes Schema in ein neues Ausgabeschema zu kopieren, stellen Sie sicher, dass das zu kopierende Schema in der Schemaauswahl angezeigt wird. Wählen Sie das Symbol für **Overflow (Überfluss)** (![\[\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/edit-schema-actions-button.png)) und anschließend **Duplicate (Duplizieren)** aus.

   Um ein Ausgabeschema zu löschen, stellen Sie sicher, dass das zu löschende Schema in der Schemaauswahl angezeigt wird. Wählen Sie das Symbol für **Overflow (Überfluss)** (![\[\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/edit-schema-actions-button.png)) und anschließend **Delete (Löschen)** aus.

1. Fügen Sie dem neuen Schema neue Root-Schlüssel hinzu oder bearbeiten Sie die duplizierten Schlüssel. 

1. Wenn Sie die Ausgabeschemata modifizieren, wählen Sie die Schaltfläche **Apply (Anwenden)** aus, um die Änderungen zu speichern und den Schema-Editor zu verlassen.

   Wenn Sie Änderungen nicht speichern möchten, wählen Sie die Schaltfläche **Cancel (Abbrechen)** aus.

## Konfigurieren der benutzerdefinierten Transformationsausgabe
<a name="transforms-custom-output"></a>

Eine benutzerdefinierte Code-Transformation gibt eine Sammlung von `DynamicFrames` zurück, auch wenn es nur einen `DynamicFrame` in der Ergebnismenge gibt. 

**Die Ausgabe von einem benutzerdefinierten Transformationsknoten verarbeiten**

1. Fügen Sie einen *SelectFromCollection*Transformationsknoten hinzu, dessen übergeordneter Knoten der benutzerdefinierte Transformationsknoten ist. Aktualisieren Sie diese Transformation, um anzugeben, welchen Datensatz Sie verwenden möchten. Weitere Informationen finden Sie unter [Wird verwendet SelectFromCollection , um auszuwählen, welcher Datensatz beibehalten werden soll](transforms-configure-select-collection.md).

1. Fügen Sie dem Auftragsdiagramm zusätzliche *SelectFromCollection*Transformationen hinzu, wenn Sie zusätzliche Transformationen verwenden möchten, die vom benutzerdefinierten Transformationsknoten `DynamicFrames` erzeugt wurden. 

   So könnten Sie etwa einen benutzerdefinierten Transformationsknoten hinzufügen, der einen Flug-Datensatz in mehrere Datensätze aufteilt aber einige der identifizierenden Eigenschaftsschlüssel in den einzelnen Ausgabeschemata dupliziert, z. B. Flugdatum oder Flugnummer. Sie fügen für jedes Ausgabeschema einen *SelectFromCollection*Transformationsknoten hinzu, wobei der benutzerdefinierte Transformationsknoten der übergeordnete Knoten ist.

1. (Optional) Anschließend können Sie jeden *SelectFromCollection*Transformationsknoten als Eingabe für andere Knoten im Job oder als übergeordnetes Element für einen Datenzielknoten verwenden.