

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Criação de um script de usuário
<a name="create-user-script"></a>

O script do usuário deve conter uma função de ponto de entrada (em outras palavras, um manipulador). Você pode nomear seu arquivo de script de usuário com qualquer nome de arquivo Python válido.

O procedimento a seguir descreve como criar um script de usuário para definir a funcionalidade principal da sua PySpark análise.

**Pré-requisitos**
+ PySpark 1.0 (corresponde ao Python 3.11 e ao Spark 3.5.3)
+ Os conjuntos de dados no Amazon S3 só podem ser lidos como associações de tabelas configuradas na sessão do Spark que você define. 
+ Seu código não pode ligar diretamente para o Amazon S3 e AWS Glue
+ Seu código não pode fazer chamadas de rede

**Para criar um script de usuário**

1. Abra um editor de texto ou ambiente de desenvolvimento integrado (IDE) de sua escolha.

   Você pode usar qualquer editor de texto ou IDE (como o Visual Studio Code ou o Notepad\+\+) que ofereça suporte a arquivos Python. PyCharm

1. Crie um novo arquivo Python com um nome de sua escolha (por exemplo,**my\_analysis.py**).

1. Defina uma função de ponto de entrada que aceite um parâmetro de objeto de contexto.

   ```
   def entrypoint(context)
   ```

   O parâmetro `context` objeto é um dicionário que fornece acesso aos componentes essenciais do Spark, tabelas referenciadas e parâmetros de análise. Ela contém:

   Acesso à sessão do Spark via `context['sparkSession']`

   Tabelas referenciadas via `context['referencedTables']`

   Parâmetros de análise via `context['analysisParameters']` (se os parâmetros estiverem definidos no modelo)

1. Defina os resultados da função de ponto de entrada: 

   ```
   return results
   ```

   `results`É necessário retornar um objeto contendo um dicionário de resultados de nomes de arquivos para uma saída. DataFrame
**nota**  
AWS Clean Rooms grava automaticamente os DataFrame objetos no bucket S3 do receptor de resultados.

1. Agora está tudo pronto para: 

   1. Armazene esse script de usuário no S3. Para obter mais informações, consulte [Armazenando um script de usuário e um ambiente virtual no S3](store-artifacts-in-s3.md).

   1. Crie o ambiente virtual opcional para oferecer suporte a quaisquer bibliotecas adicionais exigidas pelo seu script de usuário. Para obter mais informações, consulte [Criação de um ambiente virtual (opcional)](create-virtual-environment.md).

**Example Exemplo 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
```
A estrutura de pastas desse exemplo é a seguinte:   

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