ユーザー定義関数を実装する - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink は、以前は Amazon Kinesis Data Analytics for Apache Flink と呼ばれていました。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ユーザー定義関数を実装する

ユーザー定義関数 (UDFs) は、頻繁に使用されるロジックまたはカスタムロジックを呼び出すことができる拡張ポイントであり、クエリではそれ以外の方法で表現することはできません。Python または Java や Scala などのJVM言語を使用して、Studio ノートブック内の段落UDFsに を実装できます。言語にUDFs実装された を含む Studio ノートブックの外部JARファイルに追加することもできますJVM。

サブクラス UserDefinedFunction (または独自の抽象クラス) を登録する JARs を実装する場合は、Apache Maven で指定されたスコープ、Gradle でcompileOnly依存関係宣言、 で指定されたスコープSBT、またはUDFプロジェクトビルド設定で同等のディレクティブを使用します。これにより、UDFソースコードは Flink に対してコンパイルできますがAPIs、Flink API クラス自体はビルドアーティファクトに含まれません。Maven プロジェクトでこのような前提条件に準拠する UDF jar の例からこの pom を参照してください。

コンソールを使用して Studio ノートブックにUDFJARファイルを追加するには、次の手順に従います。

  1. Amazon S3 にUDFJARファイルをアップロードします。

  2. で AWS Management Console、Studio ノートブックを作成するためのカスタム作成オプションを選択します。

  3. Studio ノートブック作成ワークフローに従って 設定 ステップまで進みます。

  4. [ユーザー定義関数] セクションで、[ユーザー定義関数を追加] を選択します。

  5. JAR ファイルの Amazon S3 の場所、または を実装しているZIPファイルを指定しますUDF。

  6. [Save changes] (変更の保存) をクリックします。

を使用して新しい Studio ノートブックを作成するUDFJARときに を追加するにはCreateApplicationAPI、CustomArtifactConfigurationデータ型でJAR場所を指定します。既存の Studio ノートブックUDFJARに を追加するには、 UpdateApplicationAPIオペレーションを呼び出し、CustomArtifactsConfigurationUpdateデータ型で JAR の場所を指定します。または、 AWS Management Console を使用して Studio ノートブックにUDFJARファイルを追加できます。

ユーザー定義関数に関する考慮事項

  • Apache Flink Studio 用 Managed Service では、「Apache Zeppelin の用語」が使われています。ここで、ノートブックは、複数のノートを含むことができる Zeppelin インスタンスです。これにより、各ノートには複数の段落を含めることができます。Apache Flink Studio 用 Managed Service では、インタープリタープロセスはノートブックのすべてのノートで共有されます。したがって、1 つのノートで createTemporarySystemFunction を使用して明示的な関数登録を実行する場合、同じノートブックの別のノートで同じ をそのまま参照できます。

    ただし、「アプリケーションとしてデプロイ」操作は、ノートブック内のすべてのノートではなく、「個々」のノートに適用されます。アプリケーションとしてデプロイすると、アクティブノートの内容のみがアプリケーションの生成に使用されます。他のノートブックで行われる明示的な関数登録は、生成されるアプリケーションの依存関係の一部ではありません。さらに、アプリケーションとしてデプロイオプションでは、 のメインクラス名をJAR小文字の文字列に変換することで、暗黙的な関数登録が行われます。

    例えば、 TextAnalyticsUDFが UDF のメインクラスである場合JAR、暗黙的な登録は関数名 になりますtextanalyticsudf。そのため、Studio のノート 1 に次のような明示的な関数登録があった場合、共有インタープリタがあるため、そのノート(例えばノート 2)の他のすべてのノートは、名前 myNewFuncNameForClass でその関数を参照することができ

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

    しかし、ノート 2 のアプリケーションとしてデプロイする操作では、この明示的な登録は依存関係に「含まれない」ため、デプロイされたアプリケーションは期待通りに動作しません。暗黙的に登録されるため、デフォルトでは、この関数へのすべての参照は myNewFuncNameForClass ではなく textanalyticsudf であることが想定されます。

    カスタム関数名を登録する必要がある場合は、ノート 2 自体に別の段落を設け、次のように明示的に登録することが想定されます。

    %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 ;
  • UDF JAR に Flink が含まれている場合はSDKs、UDFソースコードが Flink に対してコンパイルできるように Java プロジェクトを設定しますがSDKs、Flink SDK クラス自体は などのビルドアーティファクトに含まれませんJAR。

    provided スコープは Apache Maven で、compileOnly依存関係宣言は Gradle で、providedスコープは でSBT、または同等のディレクティブはUDFプロジェクト構築設定で使用できます。この pom はUDF、jar の例から参照できます。jar の例は、maven プロジェクトでこのような前提条件に準拠しています。完全な step-by-stepチュートリアルについては、「Amazon Managed Service for Apache Flink、Amazon Translate 、および Amazon Comprehend のSQL関数を使用してストリーミングデータを翻訳、編集、分析する Amazon Translate」を参照してください。