

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Implementieren Sie benutzerdefinierte Funktionen
<a name="how-zeppelin-udf"></a>

Benutzerdefinierte Funktionen (UDFs) sind Erweiterungspunkte, mit denen Sie häufig verwendete Logik oder benutzerdefinierte Logik aufrufen können, die in Abfragen nicht anders ausgedrückt werden kann. Sie können Python oder eine JVM-Sprache wie Java oder Scala verwenden, um Ihre In-Paragraphen UDFs in Ihrem Studio-Notizbuch zu implementieren. Sie können Ihrem Studio-Notizbuch auch externe JAR-Dateien hinzufügen, die in einer UDFs JVM-Sprache implementiert sind. 

Verwenden Sie bei der Implementierung JARs dieses Registers abstrakter Klassen dieser Unterklasse `UserDefinedFunction` (oder Ihrer eigenen abstrakten Klassen) den bereitgestellten Bereich in Apache Maven, `compileOnly` Abhängigkeitsdeklarationen in Gradle, den bereitgestellten Bereich in SBT oder eine entsprechende Direktive in Ihrer UDF-Projekt-Build-Konfiguration. Dadurch kann der UDF-Quellcode gegen den Flink kompiliert werden APIs, aber die Flink-API-Klassen sind selbst nicht in den Build-Artefakten enthalten. Beziehen Sie sich auf dieses [POM](https://github.com/aws-samples/kinesis-udfs-textanalytics/blob/ec27108faa48f1a4c5d173ed3a2ef4565b58b5b5/kinesis-udfs-textanalytics-linear/pom.xml#L47) aus dem UDF-JAR-Beispiel, das diese Voraussetzung für ein Maven-Projekt erfüllt. 

**Anmerkung**  
Weitere Informationen und ein Beispiel finden Sie unter [Übersetzen, Redigieren und Analysieren von Streaming-Daten mithilfe von SQL-Funktionen mit Amazon Managed Service für Apache Flink, Amazon Translate und 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/) im *AWS Machine Learning Blog*.

Gehen Sie folgendermaßen vor, um die Konsole zum Hinzufügen von UDF-JAR-Dateien zu Ihrem Studio-Notebook zu verwenden:

1. Laden Sie Ihre UDF-JAR-Datei in Amazon S3 hoch.

1. Wählen Sie im die Option **Benutzerdefiniert erstellen AWS-Managementkonsole, um Ihr Studio-Notizbuch** zu erstellen.

1. Folgen Sie dem Workflow zur Erstellung eines Studio-Notebooks, bis Sie zum Schritt **Konfigurationen** gelangen.

1. Wählen Sie im Abschnitt **Benutzerdefinierte Funktionen** die Option **Benutzerdefinierte Funktion hinzufügen** aus.

1. Geben Sie den Amazon-S3-Speicherort der JAR- oder ZIP-Datei an, in der Ihre UDF implementiert ist.

1. Wählen Sie **Änderungen speichern ** aus.

Um beim Erstellen eines neuen Studio-Notebooks mithilfe der [CreateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_CreateApplication.html)API eine UDF-JAR hinzuzufügen, geben Sie den JAR-Speicherort im `CustomArtifactConfiguration` Datentyp an. Um einem vorhandenen Studio-Notizbuch eine UDF-JAR hinzuzufügen, rufen Sie den [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)API-Vorgang auf und geben Sie den JAR-Speicherort im `CustomArtifactsConfigurationUpdate` Datentyp an. Alternativ können Sie das verwenden, AWS-Managementkonsole um UDF-JAR-Dateien zu Ihrem Studio-Notebook hinzuzufügen.

## Überlegungen zu benutzerdefinierten Funktionen
<a name="how-zeppelin-udf-considerations"></a>
+ Managed Service für Apache Flink Studio verwendet die [Apache-Zeppelin-Terminologie](https://zeppelin.apache.org/docs/0.9.0/quickstart/explore_ui.html), wobei ein Notebook eine Zeppelin-Instance ist, die mehrere Notizen enthalten kann. Jede Notiz kann dann wiederum mehrere Absätze enthalten. Mit Managed Service für Apache Flink Studio wird der Interpreter-Prozess von allen Notizen im Notebook gemeinsam genutzt. Wenn Sie also eine explizite Funktionsregistrierung mithilfe von [createTemporarySystemFunction](https://nightlies.apache.org/flink/flink-docs-master/api/java/org/apache/flink/table/api/TableEnvironment.html#createTemporarySystemFunction-java.lang.String-java.lang.Class-) in einer Notiz durchführen, kann dieselbe so referenziert werden, wie sie in einer anderen Notiz desselben Notizbuchs ist. 

  Der Vorgang *Als Anwendung bereitstellen* bezieht sich jedoch auf eine *einzelne* Notiz und nicht auf alle Notizen im Notebook. Wenn Sie Als Anwendung bereitstellen ausführen, werden nur die Inhalte der aktiven Notiz zur Generierung der Anwendung verwendet. Jede explizite Funktionsregistrierung, die in anderen Notebooks durchgeführt wird, ist nicht Teil der generierten Anwendungsabhängigkeiten. Darüber hinaus erfolgt bei der Option „Als Anwendung bereitstellen“ eine implizite Funktionsregistrierung, indem der Hauptklassenname von JAR in eine Zeichenfolge in Kleinbuchstaben umgewandelt wird.

   Wenn `TextAnalyticsUDF` beispielsweise die Hauptklasse für UDF-JAR ist, führt eine implizite Registrierung zum Funktionsnamen `textanalyticsudf`. Wenn also eine explizite Funktionsregistrierung in Notiz 1 von Studio wie folgt erfolgt, dann können alle anderen Notizen in diesem Notebook (z. B. Notiz 2) aufgrund des gemeinsamen Interpreters mit dem Namen `myNewFuncNameForClass` auf die Funktion verweisen:

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

   Bei der Bereitstellung als Anwendung in Notiz 2 ist diese explizite Registrierung jedoch *nicht in den Abhängigkeiten enthalten*, sodass die bereitgestellte Anwendung nicht wie erwartet funktioniert. Aufgrund der impliziten Registrierung wird standardmäßig erwartet, dass alle Verweise auf diese Funktion mit `textanalyticsudf` und nicht `myNewFuncNameForClass` erfolgen.

   Falls eine Registrierung von benutzerdefinierten Funktionsnamen erforderlich ist, wird davon ausgegangen, dass Notiz 2 selbst einen weiteren Absatz enthält, in dem eine weitere explizite Registrierung wie folgt durchgeführt wird: 

  ```
  %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
  ;
  ```
+ Wenn Ihr UDF-JAR Flink enthält SDKs, konfigurieren Sie Ihr Java-Projekt so, dass der UDF-Quellcode mit dem Flink kompiliert werden kann SDKs, die Flink-SDK-Klassen selbst jedoch nicht im Build-Artefakt enthalten sind, z. B. in der JAR. 

  Sie können den `provided`-Scope in Apache Maven, `compileOnly`-Abhängigkeitsdeklarationen in Gradle, `provided`-Scope in SBT oder eine gleichwertige Direktive in der Build-Konfiguration ihres UDF-Projekts verwenden. Beziehen Sie sich auf dieses [POM](https://github.com/aws-samples/kinesis-udfs-textanalytics/blob/ec27108faa48f1a4c5d173ed3a2ef4565b58b5b5/kinesis-udfs-textanalytics-linear/pom.xml#L47) aus dem UDF-JAR-Beispiel, das diese Voraussetzung für ein Maven-Projekt erfüllt. Ein vollständiges step-by-step Tutorial finden Sie unter [Übersetzen, Redigieren und Analysieren von Streaming-Daten mithilfe von SQL-Funktionen mit Amazon Managed Service für Apache Flink, Amazon Translate und 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/).