Amazon Managed Service para Apache Flink Amazon (Amazon MSF) se denominaba anteriormente Amazon Kinesis Data Analytics para Apache Flink.
Implementación de funciones definidas por el usuario
Las funciones definidas por el usuario (User-defined functions, UDF) 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. Se puede usar Python o un lenguaje JVM como Java o Scala para implementar sus UDF en párrafos dentro de su cuaderno de Studio. También puede añadir a tu cuaderno de Studio archivos JAR externos que contengan UDF implementadas en un lenguaje JVM.
Al implementar archivos JAR que registren clases abstractas que subclasifican UserDefinedFunction (o sus propias clases abstractas), use el alcance proporcionado en Apache Maven, las declaraciones de dependencia compileOnly en Gradle, el alcance proporcionado en SBT o una directiva equivalente en la configuración de compilación del proyecto UDF. Esto permite que el código fuente de la UDF se compile con las API de Flink, pero las propias clases de la API de Flink no se incluyen en los artefactos de compilación. Consulte este pom
nota
Para ver un ejemplo de configuración, consulte Translate, redact and analyze streaming data using SQL functions with Amazon Managed Service para Apache Flink, Amazon Translate, and Amazon Comprehend
Para usar la consola para añadir archivos JAR de la UDF a su cuaderno de Studio, siga estos pasos:
-
Cargue su archivo JAR UDF en Amazon S3.
En Consola de administración de AWS, elija la opción creación personalizada para crear su cuaderno de Studio.
Siga el flujo de trabajo de creación de cuadernos de Studio hasta llegar al paso de Configuración.
-
En la sección Funciones definidas por el usuario, seleccione Añadir función definida por el usuario.
-
Especifique la ubicación en Amazon S3 del archivo JAR o el archivo ZIP que contiene la implementación de su UDF.
-
Seleccione Save changes (Guardar cambios).
Para añadir un JAR de UDF al crear un nuevo cuaderno de Studio mediante la API CreateApplication, especifique la ubicación del JAR en el tipo de datos CustomArtifactConfiguration. Para añadir un JAR de UDF a un cuaderno de Studio existente, invoque la operación de la API UpdateApplication y especifique la ubicación del JAR en el tipo de datos CustomArtifactsConfigurationUpdate. Alternativamente, puede usar Consola de administración de AWS para agregar archivos JAR UDF a su cuaderno 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 con CreateTemporarySystemFunction en una nota, se puede hacer referencia a la misma tal cual en otra nota del mismo cuadernos. 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 la clase principal de JAR en una cadena en minúsculas.
Por ejemplo, si
TextAnalyticsUDFes la clase principal de JAR de UDF, un registro implícito dará como resultado el nombre de la funcióntextanalyticsudf. 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 nombremyNewFuncNameForClassgracias 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
textanalyticsudfy nomyNewFuncNameForClass.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 su archivo JAR de UDF incluye los SDK de Flink, configure su proyecto de Java para que el código fuente de la UDF se pueda compilar con los SDK de Flink, pero las clases del SDK de Flink no estén incluidas en el artefacto de compilación, por ejemplo, el JAR.
Puede usar el alcance
provideden Apache Maven, las declaraciones de dependenciacompileOnlyen Gradle, el alcanceprovideden SBT o una directiva equivalente en la configuración de compilación de sus proyectos UDF. Puede consultar este pomdel ejemplo jar UDF, que cumple con este requisito previo en un proyecto de Maven. Para obtener un tutorial detallado y completo, consulte Traducir, redactar y analizar datos de streaming mediante funciones de SQL con Amazon Managed Service para Apache Flink, Amazon Translate y Amazon Comprehend .