

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.

# Ein Benutzerskript erstellen
<a name="create-user-script"></a>

Das Benutzerskript muss eine Einstiegsfunktion (mit anderen Worten, einen Handler) enthalten. Sie können Ihre Benutzerskriptdatei mit einem beliebigen gültigen Python-Dateinamen benennen.

Das folgende Verfahren beschreibt, wie Sie ein Benutzerskript erstellen, um die Kernfunktionen Ihrer PySpark Analyse zu definieren.

**Voraussetzungen**
+ PySpark 1.0 (entspricht Python 3.11 und Spark 3.5.3)
+ Datensätze in Amazon S3 können in der von Ihnen definierten Spark-Sitzung nur als konfigurierte Tabellenzuordnungen gelesen werden. 
+ Ihr Code kann Amazon S3 nicht direkt aufrufen und AWS Glue
+ Ihr Code kann keine Netzwerkanrufe tätigen

**Um ein Benutzerskript zu erstellen**

1. Öffnen Sie einen Texteditor oder eine integrierte Entwicklungsumgebung (IDE) Ihrer Wahl.

   Sie können jeden Texteditor oder jede IDE (wie Visual Studio Code oder Notepad\+\+) verwenden PyCharm, die Python-Dateien unterstützt.

1. Erstellen Sie eine neue Python-Datei mit einem Namen Ihrer Wahl (z. B.**my\_analysis.py**).

1. Definieren Sie eine Einstiegsfunktion, die einen Kontextobjektparameter akzeptiert.

   ```
   def entrypoint(context)
   ```

   Der `context` Objektparameter ist ein Wörterbuch, das Zugriff auf wichtige Spark-Komponenten, referenzierte Tabellen und Analyseparameter bietet. Sie enthält Folgendes:

   Zugriff auf Spark-Sitzungen über `context['sparkSession']`

   Referenzierte Tabellen über `context['referencedTables']`

   Analyseparameter über `context['analysisParameters']` (falls Parameter in der Vorlage definiert sind)

1. Definieren Sie die Ergebnisse der Entrypoint-Funktion: 

   ```
   return results
   ```

   Das `results` muss ein Objekt, das ein Ergebniswörterbuch mit Dateinamen enthält, an eine Ausgabe zurückgeben. DataFrame
**Anmerkung**  
AWS Clean Rooms schreibt die DataFrame Objekte automatisch in den S3-Bucket des Ergebnisempfängers.

1. Sie sind jetzt bereit für: 

   1. Speichern Sie dieses Benutzerskript in S3. Weitere Informationen finden Sie unter [Speichern eines Benutzerskripts und einer virtuellen Umgebung in S3](store-artifacts-in-s3.md).

   1. Erstellen Sie die optionale virtuelle Umgebung, um alle zusätzlichen Bibliotheken zu unterstützen, die für Ihr Benutzerskript erforderlich sind. Weitere Informationen finden Sie unter [Erstellen einer virtuellen Umgebung (optional)](create-virtual-environment.md).

**Example Beispiel 1**  

```
# File name: my_analysis.py

def entrypoint(context):
    try:
        # Access Spark session
        spark = context['sparkSession']

        # Access input tables
        input_table1 = context['referencedTables']['table1_name']
        input_table2 = context['referencedTables']['table2_name']

        # Example data processing operations
        output_df1 = input_table1.select("column1", "column2")
        output_df2 = input_table2.join(input_table1, "join_key")
        output_df3 = input_table1.groupBy("category").count()
    
        # Return results - each key creates a separate output folder
        return {
            "results": {
                "output1": output_df1,        # Creates output1/ folder
                "output2": output_df2,        # Creates output2/ folder
                "analysis_summary": output_df3 # Creates analysis_summary/ folder
            }
        }
   
    except Exception as e:
        print(f"Error in main function: {str(e)}")
        raise e
```
Die Ordnerstruktur dieses Beispiels sieht wie folgt aus:   

```
analysis_results/
│
├── output1/ # Basic selected columns
│ ├── part-00000.parquet
│ └── _SUCCESS
│
├── output2/ # Joined data
│ ├── part-00000.parquet
│ └── _SUCCESS
│
└── analysis_summary/ # Aggregated results
├── part-00000.parquet
└── _SUCCESS
```

**Example Beispiel 2**  

```
def entrypoint(context):
    try:
        # Get DataFrames from context
        emp_df = context['referencedTables']['employees']
        dept_df = context['referencedTables']['departments']

        # Apply Transformations
        emp_dept_df = emp_df.join(
            dept_df,
            on="dept_id",
            how="left"
        ).select(
            "emp_id",
            "name",
            "salary",
            "dept_name"
        )

        # Return Dataframes
        return {
            "results": {
                "outputTable": emp_dept_df
            }
        }

    except Exception as e:
        print(f"Error in entrypoint function: {str(e)}")
        raise e
```