

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Creazione di uno script utente
<a name="create-user-script"></a>

Lo script utente deve contenere una funzione entrypoint (in altre parole, un gestore). È possibile assegnare un nome al file di script utente con qualsiasi nome di file Python valido.

La procedura seguente descrive come creare uno script utente per definire le funzionalità principali dell'analisi. PySpark 

**Prerequisiti**
+ PySpark 1.0 (corrisponde a Python 3.11 e Spark 3.5.3)
+ I set di dati in Amazon S3 possono essere letti solo come associazioni di tabelle configurate nella sessione Spark da te definita. 
+ Il tuo codice non può chiamare direttamente Amazon S3 e AWS Glue
+ Il tuo codice non può effettuare chiamate di rete

**Per creare uno script utente**

1. Apri un editor di testo o un ambiente di sviluppo integrato (IDE) a tua scelta.

   Puoi usare qualsiasi editor di testo o IDE (come Visual Studio Code o Notepad\+\+) che supporti i file Python. PyCharm

1. Crea un nuovo file Python con un nome a tua scelta (ad esempio,**my\_analysis.py**).

1. Definite una funzione entrypoint che accetti un parametro dell'oggetto contestuale.

   ```
   def entrypoint(context)
   ```

   Il parametro `context` object è un dizionario che fornisce l'accesso ai componenti Spark essenziali, alle tabelle di riferimento e ai parametri di analisi. Contiene:

   Accesso alla sessione Spark tramite `context['sparkSession']`

   Tabelle referenziate tramite `context['referencedTables']`

   Parametri di analisi tramite `context['analysisParameters']` (se i parametri sono definiti nel modello)

1. Definisci i risultati della funzione entrypoint: 

   ```
   return results
   ```

   `results`Deve restituire un oggetto contenente un dizionario dei risultati dei nomi di file in un output. DataFrame
**Nota**  
AWS Clean Rooms scrive automaticamente gli DataFrame oggetti nel bucket S3 del ricevitore dei risultati.

1. Ora sei pronto per: 

   1. Memorizza questo script utente in S3. Per ulteriori informazioni, consulta [Memorizzazione di uno script utente e di un ambiente virtuale in S3](store-artifacts-in-s3.md).

   1. Crea l'ambiente virtuale opzionale per supportare eventuali librerie aggiuntive richieste dallo script utente. Per ulteriori informazioni, consulta [Creazione di un ambiente virtuale (opzionale)](create-virtual-environment.md).

**Example Esempio 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
```
La struttura delle cartelle di questo esempio è la seguente:   

```
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 Esempio 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
```