

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

# Menerapkan fungsi yang ditentukan pengguna
<a name="how-zeppelin-udf"></a>

Fungsi yang ditentukan pengguna (UDFs) adalah titik ekstensi yang memungkinkan Anda memanggil logika yang sering digunakan atau logika khusus yang tidak dapat dinyatakan sebaliknya dalam kueri. Anda dapat menggunakan Python atau bahasa JVM seperti Java atau Scala untuk mengimplementasikan paragraf UDFs dalam buku catatan Studio Anda. Anda juga dapat menambahkan file JAR eksternal notebook Studio yang berisi UDFs diimplementasikan dalam bahasa JVM. 

Saat menerapkan kelas abstrak register JARs yang subclass `UserDefinedFunction` (atau kelas abstrak Anda sendiri), gunakan cakupan yang disediakan di Apache Maven, deklarasi `compileOnly` dependensi di Gradle, cakupan yang disediakan di SBT, atau direktif yang setara dalam konfigurasi build proyek UDF Anda. Ini memungkinkan kode sumber UDF untuk dikompilasi terhadap Flink APIs, tetapi kelas Flink API tidak termasuk dalam artefak build. Lihat [pom](https://github.com/aws-samples/kinesis-udfs-textanalytics/blob/ec27108faa48f1a4c5d173ed3a2ef4565b58b5b5/kinesis-udfs-textanalytics-linear/pom.xml#L47) ini dari contoh toples UDF yang mematuhi prasyarat tersebut pada proyek Maven. 

**catatan**  
*Untuk contoh penyiapan, lihat [Menerjemahkan, menyunting, dan menganalisis data streaming menggunakan fungsi SQL dengan Amazon Managed Service untuk Apache Flink, Amazon Translate, dan Amazon Comprehend di Blog Machine Learning](https://aws.amazon.com/blogs/machine-learning/translate-redact-and-analyze-streaming-data-using-sql-functions-with-amazon-kinesis-data-analytics-amazon-translate-and-amazon-comprehend/).AWS *

Untuk menggunakan konsol untuk menambahkan file JAR UDF ke notebook Studio Anda, ikuti langkah-langkah berikut:

1. Upload file JAR UDF Anda ke Amazon S3.

1. Di bagian Konsol Manajemen AWS, pilih opsi **Custom create** untuk membuat notebook Studio Anda.

1. Ikuti alur kerja pembuatan notebook Studio hingga Anda sampai di langkah **Konfigurasi**.

1. Di bagian **User-defined functions** (Fungsi yang ditetapkan pengguna), pilih **Add user-defined function** (Tambahkan fungsi yang ditetapkan pengguna).

1. Tentukan lokasi Amazon S3 dari file JAR atau file ZIP yang memiliki implementasi UDF Anda.

1. Pilih **Simpan perubahan**.

Untuk menambahkan UDF JAR saat membuat notebook Studio baru menggunakan [CreateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_CreateApplication.html)API, tentukan lokasi JAR dalam tipe `CustomArtifactConfiguration` data. Untuk menambahkan UDF JAR ke notebook Studio yang ada, jalankan operasi [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)API dan tentukan lokasi JAR dalam tipe `CustomArtifactsConfigurationUpdate` data. Atau, Anda dapat menggunakan Konsol Manajemen AWS untuk menambahkan file UDF JAR ke notebook Studio Anda.

## Pertimbangan dengan fungsi yang ditentukan pengguna
<a name="how-zeppelin-udf-considerations"></a>
+ Managed Service untuk Apache Flink Studio menggunakan [terminologi Apache Zeppelin](https://zeppelin.apache.org/docs/0.9.0/quickstart/explore_ui.html) dimana notebook adalah contoh Zeppelin yang dapat berisi beberapa catatan. Setiap catatan kemudian dapat berisi beberapa paragraf. Dengan Managed Service for Apache Flink Studio, proses interpreter dibagikan di semua catatan di buku catatan. Jadi jika Anda melakukan registrasi fungsi eksplisit menggunakan [createTemporarySystemFungsi](https://nightlies.apache.org/flink/flink-docs-master/api/java/org/apache/flink/table/api/TableEnvironment.html#createTemporarySystemFunction-java.lang.String-java.lang.Class-) dalam satu catatan, hal yang sama dapat direferensikan apa adanya di catatan lain dari buku catatan yang sama. 

  Operasi *Deploy sebagai aplikasi* bekerja pada catatan *individual* dan tidak semua catatan di notebook. Saat Anda melakukan penerapan sebagai aplikasi, hanya konten catatan aktif yang digunakan untuk menghasilkan aplikasi. Registrasi fungsi eksplisit apa pun yang dilakukan di notebook lain bukan merupakan bagian dari dependensi aplikasi yang dihasilkan. Selain itu, selama Deploy sebagai opsi aplikasi pendaftaran fungsi implisit terjadi dengan mengubah nama kelas utama JAR ke string huruf kecil.

   Misalnya, jika `TextAnalyticsUDF` adalah kelas utama untuk UDF JAR, maka registrasi implisit akan menghasilkan nama fungsi. `textanalyticsudf` Jadi jika pendaftaran fungsi eksplisit di catatan 1 Studio terjadi seperti berikut ini, maka semua catatan lain di buku catatan itu (katakanlah catatan 2) dapat merujuk fungsi dengan nama `myNewFuncNameForClass` karena penerjemah bersama:

  `stenv.createTemporarySystemFunction("myNewFuncNameForClass", new TextAnalyticsUDF())`

   Namun selama penerapan sebagai operasi aplikasi pada catatan 2, pendaftaran eksplisit ini *tidak akan disertakan* dalam dependensi dan karenanya aplikasi yang diterapkan tidak akan berfungsi seperti yang diharapkan. Karena pendaftaran implisit, secara default semua referensi ke fungsi ini diharapkan bersama `textanalyticsudf` dan tidak`myNewFuncNameForClass`.

   Jika ada kebutuhan untuk pendaftaran nama fungsi kustom maka catatan 2 itu sendiri diharapkan berisi paragraf lain untuk melakukan pendaftaran eksplisit lainnya sebagai berikut: 

  ```
  %flink(parallelism=l)
  import com.amazonaws.kinesis.udf.textanalytics.TextAnalyticsUDF 
  # re-register the JAR for UDF with custom name
  stenv.createTemporarySystemFunction("myNewFuncNameForClass", new TextAnalyticsUDF())
  ```

  ```
  %flink. ssql(type=update, parallelism=1) 
  INSERT INTO
      table2
  SELECT
      myNewFuncNameForClass(column_name)
  FROM
      table1
  ;
  ```
+ Jika UDF JAR Anda menyertakan Flink SDKs, maka konfigurasikan proyek Java Anda sehingga kode sumber UDF dapat dikompilasi terhadap Flink SDKs, tetapi kelas Flink SDK tidak termasuk dalam artefak build, misalnya JAR. 

  Anda dapat menggunakan `provided` cakupan di Apache Maven, deklarasi `compileOnly` dependensi di Gradle, `provided` cakupan di SBT, atau direktif yang setara dalam konfigurasi build proyek UDF mereka. Anda dapat merujuk ke [pom](https://github.com/aws-samples/kinesis-udfs-textanalytics/blob/ec27108faa48f1a4c5d173ed3a2ef4565b58b5b5/kinesis-udfs-textanalytics-linear/pom.xml#L47) ini dari contoh toples UDF, yang mematuhi prasyarat seperti itu pada proyek maven. Untuk step-by-step tutorial selengkapnya, lihat [Terjemahkan, edit, dan analisis data streaming menggunakan fungsi SQL dengan Amazon Managed Service untuk Apache Flink, Amazon Translate, dan Amazon Comprehend](https://aws.amazon.com/blogs/machine-learning/translate-redact-and-analyze-streaming-data-using-sql-functions-with-amazon-kinesis-data-analytics-amazon-translate-and-amazon-comprehend/).