Funções definidas pelo usuário - Managed Service for Apache Flink

Anteriormente, o Amazon Managed Service for Apache Flink era conhecido como Amazon Kinesis Data Analytics for Apache Flink.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Funções definidas pelo usuário

As funções definidas pelo usuário (UDFs) são pontos de extensão que permitem chamar a lógica usada com frequência ou a lógica personalizada que não pode ser expressa de outra forma em consultas. Você pode usar Python ou uma linguagem JVM como Java ou Scala para implementar suas UDFs em parágrafos dentro do seu notebook Studio. Você também pode adicionar ao seu notebook Studio arquivos JAR externos que contêm UDFs implementadas em uma linguagem JVM.

Ao implementar JARs que registram classes abstratas dessa subclasse UserDefinedFunction (ou suas próprias classes abstratas), use o escopo fornecido no Apache Maven, as declarações de dependência compileOnly no Gradle, o escopo fornecido no SBT ou uma diretiva equivalente na configuração de compilação do projeto UDF. Isso permite que o código-fonte da UDF seja compilado com as APIs do Flink, mas as classes da API do Flink não estão incluídas nos artefatos de construção. Consulte esse exemplo de pom do exemplo jar UDF, que atende a esse pré-requisito em um projeto Maven.

Para usar o console para adicionar arquivos JAR UDF ao seu notebook Studio, siga estas etapas:

  1. Faça upload do arquivo JAR UDF para o Amazon S3.

  2. No AWS Management Console, escolha a opção de criação personalizada para criar seu notebook Studio.

  3. Siga o fluxo de trabalho de criação do notebook Studio até chegar à etapa Configurações.

  4. Na seção Funções definidas pelo usuário, selecione Adicionar função definida pelo usuário.

  5. Especifique a localização do Amazon S3 do arquivo JAR ou do arquivo ZIP que tem a implementação da sua UDF.

  6. Escolha Salvar alterações.

Para adicionar um JAR UDF ao criar um novo notebook Studio usando a CreateApplicationAPI, especifique a localização do JAR no tipo de CustomArtifactConfiguration dados. Para adicionar um JAR UDF a um notebook Studio existente, invoque a operação da UpdateApplicationAPI e especifique a localização do JAR no tipo de CustomArtifactsConfigurationUpdate dados. Como alternativa, você pode usar o AWS Management Console para adicionar arquivos JAR UDF ao seu notebook Studio.

Considerações com funções definidas pelo usuário

  • O Managed Service for Apache Flink Studio usa a terminologia do Apache Zeppelin, em que um notebook é uma instância do Zeppelin que pode conter várias notas. Cada nota pode conter vários parágrafos. Com o Managed Service for Apache Flink Studio, o processo do intérprete é compartilhado em todas as notas no notebook. Portanto, se você realizar um registro explícito de createTemporarySystemfunção usando Function em uma nota, a mesma poderá ser referenciada como está em outra nota do mesmo caderno.

    No entanto, a operação Implantar como aplicativo funciona em uma nota individual e não em todas as notas no notebook. Quando você executa a implantação como aplicativo, somente o conteúdo da nota ativa é usado para gerar o aplicativo. Qualquer registro explícito de função realizado em outros notebooks não faz parte das dependências de aplicativos geradas. Além disso, durante a opção Implantar como aplicativo, ocorre um registro implícito da função convertendo o nome da classe principal do JAR em uma string minúscula.

    Por exemplo, se TextAnalyticsUDF for a classe principal do UDF JAR, um registro implícito resultará no nome da função textanalyticsudf. Portanto, se um registro de função explícito na nota 1 do Studio ocorrer da seguinte forma, todas as outras notas nesse notebook (digamos, nota 2) poderão referenciar a função pelo nome por myNewFuncNameForClass causa do interpretador compartilhado:

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

    No entanto, durante a operação de implantação como aplicativo na nota 2, esse registro explícito não será incluído nas dependências e, portanto, o aplicativo implantado não funcionará conforme o esperado. Por causa do registro implícito, por padrão, espera-se que todas as referências a essa função estejam com textanalyticsudf ou não myNewFuncNameForClass.

    Se houver necessidade de registro de nome de função personalizado, espera-se que a própria nota 2 contenha outro parágrafo para realizar outro registro explícito da seguinte forma:

    %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 ;
  • Se o seu UDF JAR incluir SDKs do Flink, configure seu projeto Java para que o código-fonte do UDF possa ser compilado com os SDKs do Flink, mas as classes do SDK do Flink não sejam incluídas no artefato de construção, por exemplo, o JAR.

    Você pode usar o provided escopo no Apache MavencompileOnly, as declarações de dependência no Gradle, o escopo provided no SBT ou a diretiva equivalente na configuração de compilação do projeto UDF. Você pode consultar esse pom do exemplo UDF jar, que atende a esse pré-requisito em um projeto Maven. Para ver um step-by-step tutorial completo, consulte este artigo Traduza, edite e analise dados de streaming usando funções SQL com o Amazon Managed Service para Apache Flink, Amazon Translate e Amazon Comprehend.