Implementieren Sie benutzerdefinierte Funktionen - Managed Service für Apache Flink

Amazon Managed Service für Apache Flink war zuvor als Amazon Kinesis Data Analytics für Apache Flink bekannt.

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

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 JVM Sprache UDFs implementiert sind.

Verwenden Sie bei der Implementierung JARs dieses Registers abstrakte 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 werdenAPIs, aber die API Flink-Klassen sind selbst nicht in den Build-Artefakten enthalten. Beziehen Sie sich auf dieses Pom from the UDF Jar-Beispiel, das eine solche Voraussetzung für ein Maven-Projekt erfüllt.

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

  1. Laden Sie Ihre UDF JAR Datei auf Amazon S3 hoch.

  2. Wählen Sie im die Option Benutzerdefiniert erstellen AWS Management Console, um Ihr Studio-Notizbuch zu erstellen.

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

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

  5. Geben Sie den Amazon S3 S3-Speicherort der JAR Datei oder der ZIP Datei an, die die Implementierung Ihres hatUDF.

  6. Wählen Sie Änderungen speichern.

Um ein hinzuzufügen UDFJAR, wenn Sie ein neues Studio-Notizbuch mit dem erstellen CreateApplicationAPI, geben Sie den JAR Speicherort im CustomArtifactConfiguration Datentyp an. Um ein UDF JAR zu einem vorhandenen Studio-Notizbuch hinzuzufügen, rufen Sie den UpdateApplicationAPIVorgang auf und geben Sie den JAR Speicherort im CustomArtifactsConfigurationUpdate Datentyp an. Alternativ können Sie den verwenden, AWS Management Console um Ihrem Studio-Notizbuch UDF JAR Dateien hinzuzufügen.

Überlegungen zu benutzerdefinierten Funktionen

  • Managed Service für Apache Flink Studio verwendet die Apache-Zeppelin-Terminologie, 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 in einer Notiz eine explizite Funktionsregistrierung mithilfe von createTemporarySystemFunction durchführen, kann in einer anderen Notiz desselben Notizbuchs auf dieselbe Referenz verwiesen werden.

    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 beispielsweise die Hauptklasse für TextAnalyticsUDF ist UDFJAR, 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 Sie UDF JAR Flink einschließenSDKs, konfigurieren Sie Ihr Java-Projekt so, dass der UDF Quellcode gegen den Flink kompiliert werden kannSDKs, die SDK Flink-Klassen aber selbst nicht im Build-Artefakt enthalten sind, zum Beispiel die. JAR

    Sie können provided scope in Apache Maven, compileOnly Abhängigkeitsdeklarationen in Gradle, provided scope in oder eine gleichwertige Direktive in ihrer SBT Projekt-Build-Konfiguration verwenden. UDF Sie können auf dieses Pom aus dem UDF Jar-Beispiel verweisen, das eine solche 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 von Amazon Managed Service für Apache Flink, Amazon Translate und Amazon Comprehend.