

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Membuat skrip pengguna
<a name="create-user-script"></a>

Script pengguna harus berisi fungsi entrypoint (dengan kata lain, handler). Anda dapat memberi nama file skrip pengguna Anda dengan nama file Python yang valid.

Prosedur berikut menjelaskan cara membuat skrip pengguna untuk menentukan fungsionalitas inti PySpark analisis Anda.

**Prasyarat**
+ PySpark 1.0 (sesuai dengan Python 3.11 dan Spark 3.5.3)
+ Kumpulan data di Amazon S3 hanya dapat dibaca sebagai asosiasi tabel yang dikonfigurasi dalam sesi Spark yang Anda tentukan. 
+ Kode Anda tidak dapat langsung memanggil Amazon S3 dan AWS Glue
+ Kode Anda tidak dapat melakukan panggilan jaringan

**Untuk membuat skrip pengguna**

1. Buka editor teks atau Integrated Development Environment (IDE) pilihan Anda.

   Anda dapat menggunakan editor teks atau IDE (seperti Visual Studio Code, PyCharm, atau Notepad \$1\$1) yang mendukung file Python.

1. Buat file Python baru dengan nama pilihan Anda (misalnya,**my\$1analysis.py**).

1. Mendefinisikan fungsi entrypoint yang menerima parameter objek konteks.

   ```
   def entrypoint(context)
   ```

   Parameter `context` objek adalah kamus yang menyediakan akses ke komponen Spark penting, tabel referensi, dan parameter analisis. Ini berisi:

   Akses sesi percikan melalui `context['sparkSession']`

   Tabel yang direferensikan melalui `context['referencedTables']`

   Parameter analisis melalui `context['analysisParameters']` (jika parameter didefinisikan dalam template)

1. Tentukan hasil fungsi entrypoint: 

   ```
   return results
   ```

   `results`Harus mengembalikan objek yang berisi hasil kamus nama file ke output. DataFrame
**catatan**  
AWS Clean Rooms secara otomatis menulis DataFrame objek ke ember S3 dari penerima hasil.

1. Anda sekarang siap untuk: 

   1. Simpan skrip pengguna ini di S3. Untuk informasi selengkapnya, lihat [Menyimpan skrip pengguna dan lingkungan virtual di S3](store-artifacts-in-s3.md).

   1. Buat lingkungan virtual opsional untuk mendukung pustaka tambahan apa pun yang diperlukan oleh skrip pengguna Anda. Untuk informasi selengkapnya, lihat [Membuat lingkungan virtual (opsional)](create-virtual-environment.md).

**Example Contoh 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
```
Struktur folder dari contoh ini adalah sebagai berikut:   

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