Criar uma transformação personalizada - AWS Glue

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á.

Criar uma transformação personalizada

Se precisar executar transformações mais complicadas em seus dados ou quiser adicionar chaves de propriedade de dados ao conjunto de dados, você pode adicionar uma transformação Custom code (Código personalizado) em seu diagrama de trabalho. O nó Custom code (Código personalizado) permite inserir um script que executa a transformação.

Ao usar código personalizado, você deve usar um editor de esquema para indicar as alterações feitas na saída por meio do código personalizado. Ao editar o esquema, você pode executar as seguintes ações:

  • Adicionar ou remover chaves de propriedade de dados

  • Alterar o tipo de dados das chaves de propriedade de dados

  • Alterar o nome das chaves de propriedade de dados

  • Reestruturar uma chave de propriedade aninhada

Você deve usar uma transformação SelectFromCollection (Selecionar da coleção) para escolher um único DynamicFrame do resultado do nó de transformação personalizada antes de enviar a saída para um local de destino.

Use as seguintes tarefas para adicionar um nó de transformação personalizada ao diagrama de trabalho.

Adicionar um nó de transformação de código personalizado ao diagrama de trabalho

Para adicionar um nó de transformação personalizado ao diagrama de trabalho
  1. (Opcional) abra o painel Recurso e escolha Transformação personalizada para adicionar uma nova transformação ao diagrama de trabalho.

  2. Na guia Node properties (Propriedades do nó), insira um nome para o nó no diagrama de trabalho. Se um nó pai ainda não estiver selecionado, ou se você quiser várias entradas para a transformação personalizada, escolha um nó na lista Node parents (Nós pais) para usar como fonte de entrada para a transformação.

Inserir código para o nó de transformação personalizada

Você pode digitar ou copiar código em um campo de entrada. O trabalho usa esse código para executar a transformação de dados. Você pode fornecer um trecho de código em Python ou Scala. O código deve aceitar um ou mais DynamicFrames como entrada e retornar uma coleção de DynamicFrames.

Para inserir o script para um nó de transformação personalizada
  1. Com o nó de transformação personalizada selecionado no diagrama de trabalho, escolha a guia Transform (Transformação).

  2. No campo de entrada de texto, no cabeçalho Code block (Bloco de código), cole ou insira o código da transformação. O código que você usa deve corresponder à linguagem especificada para o trabalho na guia Job details (Detalhes do trabalho).

    Ao fazer referência aos nós de entrada em seu código, o AWS Glue Studio nomeia o DynamicFrames retornado pelos nós do diagrama de trabalho sequencialmente com base na ordem de criação. Use um dos seguintes métodos de atribuição de nomes no código:

    • Geração de código clássico: use nomes funcionais para se referir aos nós no diagrama do trabalho.

      • Nós da origem dos dados: DataSource0, DataSource1, DataSource2 e assim por diante.

      • Nós de transformação: Transform0, Transform1, Transform2 e assim por diante.

    • Geração de novo código: use o nome especificado na guia Node properties (Propriedades do nó), seguida por um "_node1", "_node2" anexao e assim por diante. Por exemplo, S3bucket_node1, ApplyMapping_node2, S3bucket_node2, MyCustomNodeName_node1.

    Para obter mais informações sobre o gerador de novo código, consulte Geração de código de script.

Os exemplos a seguir mostram o formato do código a ser inserido na caixa de código:

Python

O exemplo a seguir pega o primeiro DynamicFrame recebido, converte-o em um DataFrame para aplicar o método de filtro nativo (mantendo somente registros que têm mais de 1.000 votos) e, em seguida, converte-o novamente em um DynamicFrame antes de devolvê-lo.

def FilterHighVoteCounts (glueContext, dfc) -> DynamicFrameCollection: df = dfc.select(list(dfc.keys())[0]).toDF() df_filtered = df.filter(df["vote_count"] > 1000) dyf_filtered = DynamicFrame.fromDF(df_filtered, glueContext, "filter_votes") return(DynamicFrameCollection({"CustomTransform0": dyf_filtered}, glueContext))
Scala

O exemplo a seguir pega o primeiro DynamicFrame recebido, converte-o em um DataFrame para aplicar o método de filtro nativo (mantendo somente registros que têm mais de 1.000 votos) e, em seguida, converte-o novamente em um DynamicFrame antes de devolvê-lo.

object FilterHighVoteCounts { def execute(glueContext : GlueContext, input : Seq[DynamicFrame]) : Seq[DynamicFrame] = { val frame = input(0).toDF() val filtered = DynamicFrame(frame.filter(frame("vote_count") > 1000), glueContext) Seq(filtered) } }

Editar o esquema de um nó de transformação personalizada

Quando você usa um nó de transformação personalizada, o AWS Glue Studio não pode inferir automaticamente os esquemas de saída criados pela transformação. Use o editor de esquema para descrever as alterações de esquema implantadas pelo código de transformação personalizada.

Um nó de código personalizado pode ter qualquer número de nós pais, cada um fornecendo um DynamicFrame como entrada para o seu código personalizado. Um nó de código personalizado retorna uma coleção de DynamicFrames. Cada DynamicFrame usado como entrada tem um esquema associado. Você deve adicionar um esquema que descreva cada DynamicFrame retornado pelo nó de código personalizado.

nota

Quando você define seu próprio esquema em uma transformação personalizada, o AWS Glue Studio não herda esquemas de nós anteriores. Para atualizar o esquema, selecione o nó Custom transform (Transformação personalizada) e escolha a guia Data preview (Visualização de dados). Depois que a visualização for gerada, escolha “Use Preview Schema” (Usar esquema de visualização). O esquema será substituído pelo esquema usando os dados de visualização.

Para editar os esquemas de um nó de transformação personalizada
  1. Com o nó de transformação personalizada selecionado no diagrama de trabalho, no painel de detalhes do nó, escolha a guia Outpu schema (Esquema de saída).

  2. Escolha Edit (Editar) para fazer alterações no esquema.

    Se você tiver chaves de propriedade de dados aninhadas, como uma matriz ou objeto, pode escolher o ícone Expand-Rows (Expandir linhas, A double-ended arrow pointing upwards and downwards between two parallel lines ) no canto superior direito de cada painel de esquema, para expandir a lista de chaves de propriedade de dados filhas. Depois de escolher esse ícone, ele muda para o ícone Collapse-Rows (Recolher linhas, Two arrows, one pointing up to a line and one pointing down to the same line ), que você pode usar para recolher a lista de chaves de propriedade filhas.

  3. Modifique o esquema usando as seguintes ações na seção no lado direito da página:

    • Para renomear uma chave de propriedade, coloque o cursor na caixa de texto Key (Chave) da chave de propriedade e insira o novo nome.

    • Para alterar o tipo de dados de uma chave de propriedade de dados, use a lista para escolher o novo tipo de dados da chave de propriedade.

    • Para adicionar uma nova propriedade de nível superior ao esquema, escolha o botão Overflow (excedente, An ellipsis (...) ) à esquerda do botão Cancel (Cancelar) e, em seguida, escolha Add root key (Adicionar chave raiz).

    • Para adicionar uma chave de propriedade filha ao esquema, escolha o ícone Add-Key (Adicionar chave, A rectangle with a plus sign in the bottom left corner ) associado à chave pai. Insira um nome para a chave filha e escolha o tipo de dados.

    • Para remover uma chave de propriedade do esquema, escolha o ícone Remove (Excluir, An outline of a trash can ) à extrema direita do nome da chave.

  4. Se o código de transformação personalizada usar vários DynamicFrames, você poderá adicionar esquemas de saída adicionais.

    • Para adicionar um esquema novo e vazio, escolha o ícone Overflow (Excedente, An ellipsis (...) ) e, em seguida, escolha Add output schema (Adicionar esquema de saída).

    • Para copiar um esquema existente em um novo esquema de saída, certifique-se de que aquele que você deseja copiar seja exibido no seletor de esquemas. Selecione o ícone Overflow (Excedente, An ellipsis (...) ) e, em seguida, escolha Duplicate (Duplicar).

    Se você quiser remover um esquema de saída, certifique-se de que o esquema que deseja copiar seja exibido no seletor de esquemas. Escolha o ícone Overflow (Excedente, An ellipsis (...) ) e, em seguida, escolha Delete (Excluir).

  5. Adicione novas chaves raiz ao novo esquema ou edite as chaves duplicadas.

  6. Quando estiver modificando os esquemas de saída, escolha o botão Apply (Aplicar) para salvar suas alterações e saia do editor de esquemas.

    Se não quiser salvar as alterações, escolha o botão Cancel (Cancelar).

Configurar a saída da transformação personalizada

Uma transformação de código personalizado retorna uma coleção de DynamicFrames, mesmo que haja somente um DynamicFrame no conjunto de resultados.

Para processar a saída de um nó de transformação personalizada
  1. Adicione um nó de transformação SelectFromCollection (Selecionar da coleção) que tem o nó de transformação personalizada como nó pai. Atualize esta transformação para indicar qual conjunto de dados você deseja usar. Consulte Usar SelectFromCollection (Selecionar da coleção) para escolher qual conjunto de dados manter Para mais informações.

  2. Adicione mais transformações SelectFromCollection (Selecionar da coleção) para o diagrama de trabalho se você quiser usar DynamicFrames adionais produzidos pelo nó de transformação personalizada.

    Considere um cenário no qual você adiciona um nó de transformação personalizada para dividir um conjunto de dados de voo em vários conjuntos de dados, mas duplica algumas das chaves de propriedade de identificação em cada esquema de saída, como a data ou o número do voo. Adicione um nó de transformação SelectFromCollection (Selecionar da coleção) para cada esquema de saída, com o nó de transformação personalizada como nó pai.

  3. (Opcional) em seguida, você pode usar cada nó de transformação SelectFromCollection (Selecionar da coleção) como entrada para outros nós no trabalho ou como pai para um nó de destino de dados.