

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

# Tutorial: Membuat transformasi pembelajaran mesin dengan AWS Glue
<a name="machine-learning-transform-tutorial"></a>

Tutorial ini memandu Anda melakukan tindakan untuk membuat dan mengelola transformasi machine learning (ML) menggunakan AWS Glue. Sebelum menggunakan tutorial ini, Anda harus terbiasa dengan menggunakan konsol AWS Glue untuk menambahkan crawler dan tugas serta mengedit skrip. Anda juga harus terbiasa dengan mencari dan mengunduh file di konsol Amazon Simple Storage Service (Amazon S3).

Dalam contoh ini, Anda membuat sebuah transformasi `FindMatches` untuk menemukan catatan yang cocok, mengajari cara mengidentifikasi catatan yang cocok dan tidak cocok, dan menggunakannya dalam sebuah tugas AWS Glue. Tugas AWS Glue menulis file Amazon S3 baru dengan sebuah kolom tambahan bernama `match_id`. 

Sumber data yang digunakan oleh tutorial ini adalah sebuah file bernama `dblp_acm_records.csv`. File ini adalah versi modifikasi dari publikasi akademis (DBLP dan ACM) yang tersedia dari [Set data DBLP ACM](https://doi.org/10.3886/E100843V2) asli. File `dblp_acm_records.csv` adalah file nilai yang dipisahkan dengan koma (CSV) dalam format UTF-8 tanpa tanda urutan byte (BOM). 

File kedua, `dblp_acm_labels.csv`, adalah contoh file pelabelan yang berisi catatan kecocokan dan catatan ketidakcocokan yang digunakan untuk mengajarkan transformasi sebagai bagian dari tutorial ini. 

**Topics**
+ [Langkah 1: Merayapi data sumber](#ml-transform-tutorial-crawler)
+ [Langkah 2: Tambahkan transformasi pembelajaran mesin](#ml-transform-tutorial-create)
+ [Langkah 3: Ajarkan transformasi pembelajaran mesin Anda](#ml-transform-tutorial-teach)
+ [Langkah 4: Perkirakan kualitas transformasi pembelajaran mesin Anda](#ml-transform-tutorial-estimate-quality)
+ [Langkah 5: Tambahkan dan jalankan pekerjaan dengan transformasi pembelajaran mesin Anda](#ml-transform-tutorial-add-job)
+ [Langkah 6: Verifikasi data keluaran dari Amazon S3](#ml-transform-tutorial-data-output)

## Langkah 1: Merayapi data sumber
<a name="ml-transform-tutorial-crawler"></a>

Pertama, lakukan crawling pada file CSV Amazon S3 sumber untuk membuat sebuah tabel metadata yang sesuai di Katalog Data.

**penting**  
Untuk mengarahkan crawler agar membuat tabel untuk file CSV saja, simpan data sumber CSV di folder Amazon S3 yang berbeda dari file lain.

1. Masuk ke Konsol Manajemen AWS dan buka AWS Glue konsol di [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Di panel navigasi, pilih **Crawler**, **Tambahkan crawler**. 

1. Ikuti penuntun untuk membuat dan menjalankan crawler bernama `demo-crawl-dblp-acm` dengan keluaran ke basisdata `demo-db-dblp-acm`. Saat menjalankan penuntun, buat basis data `demo-db-dblp-acm` jika itu belum ada. Pilih jalur sertakan Amazon S3 ke data sampel di Wilayah saat ini AWS . Contohnya, untuk `us-east-1`, Amazon S3 mencakup path ke file sumber yakni `s3://ml-transforms-public-datasets-us-east-1/dblp-acm/records/dblp_acm_records.csv`. 

   Jika berhasil, crawler menciptakan tabel `dblp_acm_records_csv` dengan kolom berikut: id, judul, penulis, tempat, tahun, dan sumber.

## Langkah 2: Tambahkan transformasi pembelajaran mesin
<a name="ml-transform-tutorial-create"></a>

Selanjutnya, tambahkan sebuah transformasi machine learning yang didasarkan pada skema tabel sumber data yang dibuat oleh crawler bernama `demo-crawl-dblp-acm`.

1. Di AWS Glue konsol, di panel navigasi di bawah **Integrasi Data dan ETL**, pilih **Alat klasifikasi data > Pencocokan Rekam**, lalu **Tambahkan** transformasi. Ikuti wizard untuk membuat `Find matches` transformasi dengan properti berikut. 

   1. Untuk **Nama transformasi**, masukkan **demo-xform-dblp-acm**. Ini adalah nama transformasi yang digunakan untuk menemukan kecocokan dalam data sumber.

   1. Untuk **IAM role**, pilih sebuah IAM role yang memiliki izin ke data sumber Amazon S3, file pelabelan, dan operasi API AWS Glue. Untuk informasi selengkapnya, lihat [Membuat IAM role untuk AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/create-an-iam-role.html) dalam *Panduan Developer AWS Glue *.

   1. Untuk **sumber Data**, pilih tabel bernama **dblp\$1acm\$1records\$1csv** dalam database. **demo-db-dblp-acm**

   1. Untuk **Kunci primer**, pilih kolom kunci primer untuk tabel, **id**.

1. Dalam penuntun, pilih **Selesai** dan kembali ke daftar **Transformasi ML**.

## Langkah 3: Ajarkan transformasi pembelajaran mesin Anda
<a name="ml-transform-tutorial-teach"></a>

Selanjutnya, Anda ajari transformasi machine learning Anda dengan menggunakan file pelabelan sampel dalam tutorial ini.

Anda tidak dapat menggunakan transformasi bahasa mesin dalam tugas extract, transform, and load (ETL) sampai statusnya **Siap digunakan**. Agar transformasi Anda siap, maka Anda harus mengajarinya cara mengidentifikasi catatan kecocokan dan ketidakcocokan dengan memberikan contoh catatan kecocokan dan ketidakcocokan. Untuk mengajarkan transformasi Anda, Anda dapat **Buat sebuah file label**, menambahkan label, dan kemudian **Unggah file label**. Dalam tutorial ini, Anda dapat menggunakan contoh file pelabelan bernama `dblp_acm_labels.csv`. Untuk informasi selengkapnya tentang proses pelabelan, lihat [Pelabelan](machine-learning.md#machine-learning-labeling).

1. Di AWS Glue konsol, di panel navigasi, pilih **Rekam Pencocokan**.

1. Pilih transformasi `demo-xform-dblp-acm`, dan kemudian pilih **Tindakan**, **Ajarkan**. Ikuti panduan untuk mengajar transformasi `Find matches` Anda. 

1. Pada halaman properti transformasi, pilih **Saya memiliki label**. Pilih jalur Amazon S3 ke file pelabelan sampel di Wilayah saat ini. AWS Contohnya, untuk `us-east-1`, unggah file pelabelan yang tersedia dari path Amazon S3 `s3://ml-transforms-public-datasets-us-east-1/dblp-acm/labels/dblp_acm_labels.csv` dengan opsi **menimpa** label yang ada. File pelabelan harus ditempatkan di Amazon S3 dengan Wilayah yang sama dengan konsol AWS Glue.

   Ketika Anda mengunggah file pelabelan, sebuah tugas dimulai di AWS Glue untuk menambah atau menimpa label yang digunakan untuk mengajar transformasi cara memproses sumber data.

1. Di halaman terakhir penuntun, pilih **Selesai**, dan kembali ke daftar **Transformasi ML**.

## Langkah 4: Perkirakan kualitas transformasi pembelajaran mesin Anda
<a name="ml-transform-tutorial-estimate-quality"></a>

Selanjutnya, Anda dapat memperkirakan kualitas transformasi machine learning Anda. Kualitasnya tergantung pada berapa banyak pelabelan yang telah Anda lakukan. Untuk informasi selengkapnya tentang cara memperkirakan kualitas, lihat [Estimasi kualitas](console-machine-learning-transforms.md#console-machine-learning-transforms-metrics).

1. Di AWS Glue konsol, di panel navigasi di bawah **Integrasi Data dan ETL**, pilih **Alat klasifikasi data > Pencocokan Rekam**. 

1. Pilih transformasi `demo-xform-dblp-acm`, dan pilih tab **Estimasi kualitas**. Tab ini menampilkan perkiraan kualitas saat ini, jika tersedia, untuk transformasi tersebut. 

1. Pilih **Estimasi kualitas** untuk memulai sebuah tugas untuk memperkirakan kualitas transformasi. Keakuratan estimasi kualitas tersebut didasarkan pada pelabelan data sumber.

1. Arahkan ke tab **Riwayat**. Dalam panel ini, eksekusi tugas dicantumkan untuk transformasi, termasuk tugas **Estimasi kualitas**. Untuk detail lebih lanjut tentang eksekusi, pilih **Log**. Periksa apakah status eksekusi adalah **Berhasil** ketika selesai.

## Langkah 5: Tambahkan dan jalankan pekerjaan dengan transformasi pembelajaran mesin Anda
<a name="ml-transform-tutorial-add-job"></a>

Pada langkah ini, Anda menggunakan transformasi machine learning Anda untuk menambah dan menjalankan tugas di AWS Glue. Saat transformasi `demo-xform-dblp-acm` sudah **Siap digunakan**, Anda dapat menggunakannya dalam tugas ETL.

1. Pada konsol AWS Glue, di panel navigasi, pilih **Tugas**.

1. Pilih **Tambahkan tugas**, dan ikuti langkah-langkah yang ada di penuntun untuk membuat tugas ETL Spark dengan skrip yang sudah dihasilkan. Pilih nilai-nilai properti berikut untuk transformasi Anda:

   1. Untuk **Nama**, pilih contoh pekerjaan dalam tutorial ini, **demo-etl-dblp-acm**.

   1. Untuk **IAM role**, pilih IAM role dengan izin ke data sumber Amazon S3, file pelabelan, dan operasi API AWS Glue. Untuk informasi selengkapnya, lihat [Membuat IAM role untuk AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/create-an-iam-role.html) dalam *Panduan Developer AWS Glue *.

   1. Untuk **Bahasa ETL**, pilih **Scala**. Ini adalah bahasa pemrograman dalam skrip ETL.

   1. Untuk **nama file Script**, pilih **demo-etl-dblp-acm**. Ini adalah nama file dari skrip Scala (sama dengan nama tugas).

   1. Untuk **Sumber data**, pilih **dblp\$1acm\$1records\$1csv**. Sumber data yang Anda pilih harus sesuai dengan skema sumber data transformasi machine learning.

   1. Untuk **Jenis transformasi**, pilih **Temukan catatan yang cocok** untuk membuat sebuah tugas dengan menggunakan transformasi machine learning.

   1. Bersihkan **Hapus catatan duplikasi**. Anda tidak ingin menghapus catatan duplikat karena catatan keluaran yang ditulis memiliki tambahan kolom `match_id` yang ditambahkan. 

   1. Untuk **Transform**, pilih **demo-xform-dblp-acm**, transformasi pembelajaran mesin yang digunakan oleh pekerjaan.

   1. Untuk **Buat tabel di target data Anda**, pilih untuk membuat tabel dengan properti berikut:
      + **Jenis penyimpanan data** — **Amazon S3**
      + **Format** — **CSV**
      + **Jenis kompresi** — **None**
      + **Jalur target - Jalur** Amazon S3 tempat output pekerjaan ditulis (di Wilayah konsol AWS saat ini)

1. Pilih **Simpan tugas dan edit skrip** untuk menampilkan halaman editor skrip.

1. Edit skrip untuk menambahkan pernyataan untuk menyebabkan output tugas untuk **Path target** untuk ditulis ke satu file partisi tunggal. Tambahkan pernyataan ini segera setelah pernyataan yang menjalankan transformasi `FindMatches`. Pernyataan tersebut serupa dengan yang berikut ini.

   ```
   val single_partition = findmatches1.repartition(1) 
   ```

   Anda harus mengubah pernyataan `.writeDynamicFrame(findmatches1)` untuk menulis output sebagai `.writeDynamicFrame(single_partion)`. 

1. Setelah Anda mengedit skrip, pilih **Simpan**. Skrip yang sudah dimodifikasi terlihat mirip dengan kode berikut, tapi disesuaikan untuk lingkungan Anda.

   ```
   import com.amazonaws.services.glue.GlueContext
   import com.amazonaws.services.glue.errors.CallSite
   import com.amazonaws.services.glue.ml.FindMatches
   import com.amazonaws.services.glue.util.GlueArgParser
   import com.amazonaws.services.glue.util.Job
   import com.amazonaws.services.glue.util.JsonOptions
   import org.apache.spark.SparkContext
   import scala.collection.JavaConverters._
   
   object GlueApp {
     def main(sysArgs: Array[String]) {
       val spark: SparkContext = new SparkContext()
       val glueContext: GlueContext = new GlueContext(spark)
       // @params: [JOB_NAME]
       val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
       Job.init(args("JOB_NAME"), glueContext, args.asJava)
       // @type: DataSource
       // @args: [database = "demo-db-dblp-acm", table_name = "dblp_acm_records_csv", transformation_ctx = "datasource0"]
       // @return: datasource0
       // @inputs: []
       val datasource0 = glueContext.getCatalogSource(database = "demo-db-dblp-acm", tableName = "dblp_acm_records_csv", redshiftTmpDir = "", transformationContext = "datasource0").getDynamicFrame()
       // @type: FindMatches
       // @args: [transformId = "tfm-123456789012", emitFusion = false, survivorComparisonField = "<primary_id>", transformation_ctx = "findmatches1"]
       // @return: findmatches1
       // @inputs: [frame = datasource0]
       val findmatches1 = FindMatches.apply(frame = datasource0, transformId = "tfm-123456789012", transformationContext = "findmatches1", computeMatchConfidenceScores = true)
     
     
       // Repartition the previous DynamicFrame into a single partition. 
       val single_partition = findmatches1.repartition(1)    
    
       
       // @type: DataSink
       // @args: [connection_type = "s3", connection_options = {"path": "s3://aws-glue-ml-transforms-data/sal"}, format = "csv", transformation_ctx = "datasink2"]
       // @return: datasink2
       // @inputs: [frame = findmatches1]
       val datasink2 = glueContext.getSinkWithFormat(connectionType = "s3", options = JsonOptions("""{"path": "s3://aws-glue-ml-transforms-data/sal"}"""), transformationContext = "datasink2", format = "csv").writeDynamicFrame(single_partition)
       Job.commit()
     }
   }
   ```

1. Pilih **Jalankan tugas** untuk memulai eksekusi tugas. Periksa status tugas dalam daftar tugas. Setelah tugas selesai, di **Transformasi ML**, tab **Riwayat**, ada baris **ID eksekusi** baru yang ditambahkan dari jenis **Tugas ETL**.

1. Arahkan ke **Tugas**, tab **Riwayat**. Dalam panel ini, eksekusi tugas dicantumkan. Untuk detail lebih lanjut tentang eksekusi, pilih **Log**. Periksa apakah status eksekusi adalah **Berhasil** ketika selesai.

## Langkah 6: Verifikasi data keluaran dari Amazon S3
<a name="ml-transform-tutorial-data-output"></a>

Pada langkah ini, Anda memeriksa output dari eksekusi tugas di bucket Amazon S3 yang Anda pilih ketika Anda menambahkan tugas. Anda dapat mengunduh file output ke komputer lokal Anda dan memverifikasi bahwa catatan kecocokan telah diidentifikasi.

1. Buka konsol Amazon S3 di. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Unduh file output target dari tugas `demo-etl-dblp-acm`. Buka file dalam aplikasi spreadsheet (Anda mungkin perlu menambahkan ekstensi file `.csv` pada file untuk membukanya dengan benar).

   Gambar berikut menunjukkan kutipan dari output pada Microsoft Excel.  
![\[Excel spreadsheet menunjukkan output dari transformasi tersebut.\]](http://docs.aws.amazon.com/id_id/glue/latest/dg/images/demo_output_dblp_acm.png)

   Sumber data dan file target keduanya memiliki 4.911 catatan. Namun, transformasi `Find matches` menambahkan kolom lain bernama `match_id` untuk mengidentifikasi catatan kecocokan dalam output. Baris dengan `match_id` yang sama dianggap catatan yang cocok. `match_confidence_score`Ini adalah angka antara 0 dan 1 yang memberikan perkiraan kualitas kecocokan yang ditemukan oleh`Find matches`.

1. Urutkan file output berdasarkan `match_id` untuk dengan mudah melihat catatan mana yang cocok. Bandingkan nilai di kolom lain untuk melihat apakah Anda setuju dengan hasil transformasi `Find matches`. Jika tidak, Anda dapat terus mengajarkan transformasi dengan menambahkan lebih banyak label lainnya. 

   Anda juga dapat mengurutkan file berdasarkan kolom lain, seperti `title`, untuk melihat apakah catatan dengan judul serupa memiliki `match_id` yang sama. 