Implemente funciones definidas por el usuario - Managed Service para Apache Flink

Amazon Managed Service para Apache Flink Amazon se denominaba anteriormente Amazon Kinesis Data Analytics para Apache Flink.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Implemente funciones definidas por el usuario

Las funciones definidas por el usuario (UDFs) son puntos de extensión que permiten llamar a la lógica de uso frecuente o a la lógica personalizada que no se puede expresar de otro modo en las consultas. Puedes usar Python o un JVM lenguaje como Java o Scala para implementar tus párrafos dentro UDFs de tu cuaderno de Studio. También puedes añadir a tu bloc de notas de Studio JAR archivos externos que contengan archivos UDFs implementados en un JVM lenguaje.

Al implementar JARs ese registro de clases abstractas en una subclase UserDefinedFunction (o tus propias clases abstractas), usa el alcance proporcionado en Apache Maven, las declaraciones de compileOnly dependencia en Gradle, el alcance proporcionado en SBT o una directiva equivalente en la configuración de compilación UDF del proyecto. Esto permite que el código UDF fuente se compile con FlinkAPIs, pero las API clases de Flink no se incluyen en sí mismas en los artefactos de compilación. Consulte este ejemplo de un fragmento del UDF tarro, que cumple con ese requisito en un proyecto de Maven.

Para usar la consola para añadir UDF JAR archivos a tu bloc de notas de Studio, sigue estos pasos:

  1. Suba el UDF JAR archivo a Amazon S3.

  2. En el AWS Management Console, elige la opción de creación personalizada para crear tu bloc de notas Studio.

  3. Siga el flujo de trabajo de creación de cuadernos de Studio hasta llegar al paso de Configuración.

  4. En la sección Funciones definidas por el usuario, seleccione Añadir función definida por el usuario.

  5. Especifique la ubicación en Amazon S3 del JAR archivo o del ZIP archivo que tiene la implementación suyaUDF.

  6. Elija Guardar cambios.

Para añadir una UDF JAR al crear una nueva libreta de Studio con la CreateApplicationAPI, especifique la JAR ubicación en el tipo de CustomArtifactConfiguration datos. Para añadir un UDF JAR bloc de notas de Studio existente, invoca la UpdateApplicationAPIoperación y especifica la JAR ubicación en el tipo de CustomArtifactsConfigurationUpdate datos. Como alternativa, puedes usar el AWS Management Console para añadir UDF JAR archivos a tu bloc de notas de Studio.

Consideraciones con funciones definidas por el usuario

  • Managed Service para Apache Flink Studio utiliza la terminología de Apache Zeppelin, según la cual un cuaderno es una instancia de Zeppelin que puede contener varias notas. De este modo, cada nota puede contener varios párrafos. Con Managed Service para Apache Flink Studio, el proceso de interpretación se comparte entre todas las notas del cuaderno. Por lo tanto, si realiza un registro de funciones explícito utilizando createTemporarySystemFunction en una nota, se puede hacer referencia a la misma tal cual en otra nota del mismo cuaderno.

    Sin embargo, la operación Implementar como aplicación funciona en una nota individual y no en todas las notas del cuaderno. Al realizar la implementación como aplicación, solo se utiliza el contenido de la nota activa para generar la aplicación. Cualquier registro de funciones explícito realizado en otros cuadernos no forma parte de las dependencias de aplicación generadas. Además, durante la opción Implementar como aplicación, se produce un registro implícito de la función al convertir el nombre de JAR la clase principal en una cadena en minúsculas.

    Por ejemplo, si TextAnalyticsUDF es la clase principal de UDFJAR, un registro implícito dará como resultado el nombre de la función. textanalyticsudf Por lo tanto, si el registro explícito de una función en la nota 1 de Studio se produce de la siguiente manera, todas las demás notas de ese cuaderno (por ejemplo, la nota 2) pueden hacer referencia a la función por su nombre myNewFuncNameForClass gracias al intérprete compartido:

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

    Sin embargo, durante la implementación como operación de aplicación (nota 2), este registro explícito no se incluirá en las dependencias y, por lo tanto, la aplicación implementada no funcionará según lo esperado. Debido al registro implícito, de forma predeterminada se espera que todas las referencias a esta función aparezcan con textanalyticsudf y no myNewFuncNameForClass.

    Si es necesario registrar el nombre de una función personalizada, se espera que la propia nota 2 contenga otro párrafo para realizar otro registro explícito de la siguiente manera:

    %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 ;
  • Si UDF JAR incluye FlinkSDKs, configure su proyecto Java para que el código UDF fuente se pueda compilar con FlinkSDKs, pero las SDK clases de Flink no estén incluidas en el artefacto de compilación, por ejemplo, el. JAR

    Puedes usar provided scope en Apache Maven, las declaraciones de compileOnly dependencia en Gradle, provided scope in o una directiva equivalente en la configuración de SBT compilación de sus proyectos. UDF Puedes hacer referencia a este poema en el ejemplo de UDF jar, que cumple con este requisito previo en un proyecto de Maven. Para ver un step-by-step tutorial completo, consulta este artículo Traduce, redacta y analiza los datos de streaming mediante SQL las funciones de Amazon Managed Service para Apache Flink, Amazon Translate y Amazon Comprehend.