Crear una transformación personalizada - AWS Glue

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.

Crear una transformación personalizada

Si necesita realizar transformaciones más complicadas en sus datos o desea agregar claves de propiedad de datos al conjunto de datos, puede agregar una transformación Custom code (Código personalizado) al diagrama de trabajo. El nodo Custom code (Código personalizado) permite introducir un script que realiza la transformación.

Cuando utilice el código personalizado, debe utilizar un editor de esquemas para indicar los cambios realizados en la salida a través del código personalizado. Cuando edita el esquema, puede realizar las siguientes acciones:

  • Agregar o eliminar claves de propiedades de datos

  • Cambiar el tipo de datos de las claves de propiedad de datos

  • Cambiar el nombre de las claves de propiedad de datos

  • Reestructurar una clave de propiedad anidada

Debe utilizar una transformación SelectFromCollection (Seleccionar desde la recopilación) para elegir un único DynamicFrame del resultado del nodo de transformación personalizado antes de enviar la salida a una ubicación de destino.

Utilice las siguientes tareas para agregar un nodo de transformación personalizado al diagrama de trabajo.

Agregar un nodo de transformación de código personalizado al diagrama de trabajo

Para agregar un nodo de transformación personalizado al diagrama de trabajo
  1. (Opcional) abra el panel de recursos y elija Custom transform para agregar una nueva transformación al diagrama de trabajo, si es necesario.

  2. En la pestaña Node properties (Propiedades del nodo), ingrese un nombre para el nodo en el diagrama de trabajo. Si todavía no se ha seleccionado un nodo principal, o si desea varias entradas para la transformación personalizada, elija un nodo en la lista Node parents (Nodos principales) que se utilizará como origen de entrada para la transformación.

Introducción de código para el nodo de transformación personalizado

Puede escribir o copiar el código en un campo de entrada. El trabajo utiliza este código para realizar la transformación de datos. Puede proporcionar un fragmento de código en Python o Scala. El código debe tener uno o varios DynamicFrames como entrada y devuelve una recopilación de DynamicFrames.

Para escribir el script para un nodo de transformación personalizado
  1. Con el nodo de transformación personalizado seleccionado en el diagrama de trabajo, elija la pestaña Transform (Transformación).

  2. En el campo de entrada de texto en el encabezado Code block (Bloque de código), pegue o escriba el código para la transformación. El código que utilice debe coincidir con el lenguaje especificado para el trabajo en la pestaña Job details (Detalles del trabajo).

    Al hacer referencia a los nodos de entrada en el código, AWS Glue Studio nombra los DynamicFrames que devuelven los nodos del diagrama de trabajo de manera secuencial en función del orden de creación. Utilice uno de los siguientes métodos de nomenclatura en el código:

    • Generación de código clásico: utilice nombres funcionales para hacer referencia a los nodos del diagrama de trabajo.

      • Nodo de origen de datos: DataSource0, DataSource1, DataSource2, etc.

      • Nodos de transformación: Transform0, Transform1, Transform2, etc.

    • Nueva generación de código: utilice el nombre especificado en la pestaña Node properties (Propiedades del nodo) de un nodo, anexado con ‘_node1’, ‘_node2’, y así sucesivamente. Por ejemplo, S3bucket_node1, ApplyMapping_node2, S3bucket_node2, MyCustomNodeName_node1.

    Para obtener más información acerca del nuevo generador de código, consulte Generación de código de script.

Los siguientes ejemplos muestran el formato del código que se va a introducir en el cuadro de código:

Python

En el siguiente ejemplo se toma el primer DynamicFrame recibido, se convierte en un valor de DataFrame para aplicar el método de filtro nativo (se mantienen solo los registros que tienen más de 1000 votos), luego se convierte nuevamente en un DynamicFrame antes de que se devuelva.

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

En el siguiente ejemplo se toma el primer DynamicFrame recibido, se convierte en un valor de DataFrame para aplicar el método de filtro nativo (se mantienen solo los registros que tienen más de 1000 votos), luego se convierte nuevamente en un DynamicFrame antes de que se devuelva.

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) } }

Edición de esquema para un nodo de transformación personalizado

Cuando utiliza un nodo de transformación personalizado, AWS Glue Studio no puede inferir automáticamente los esquemas de salida creados por la transformación. Utilice el editor de esquemas para describir los cambios de esquema implementados por el código de transformación personalizado.

Un nodo de código personalizado puede tener cualquier número de nodos principales, cada uno de los cuales proporciona un DynamicFrame como entrada para su código personalizado. Un nodo de código personalizado devuelve una recopilación de DynamicFrames. Cada DynamicFrame que se utiliza como entrada tiene asociado un esquema. Debe agregar un esquema que describa cada DynamicFrame devuelto por el nodo de código personalizado.

nota

Cuando configura su propio esquema en una transformación personalizada, AWS Glue Studio no hereda esquemas de nodos anteriors. Para actualizar el esquema, seleccione el nodo de transformación personalizada y, a continuación, elija la pestaña Data preview (Vista previa de datos). Una vez generada la vista previa, elija 'Use Preview Schema' (Usar esquema de vista previa). A continuación, el esquema será reemplazado por el esquema utilizando los datos de vista previa.

Para editar los esquemas de un nodo de transformación personalizado
  1. Con el nodo de transformación personalizado seleccionado en el diagrama de trabajo, elija la pestaña Output schema (Esquema de salida), en el panel de detalles del nodo.

  2. Seleccione Edit (Editar) para realizar cambios al esquema.

    Si tiene claves de propiedad de datos anidadas, como una matriz u objeto, puede elegir el ícono Expand-Rows (Expandir filas) ( A double-ended arrow pointing upwards and downwards between two parallel lines ) en la parte superior derecha del panel de cada esquema para expandir la lista de claves de propiedades de datos secundarias. Después de seleccionarlo, el ícono cambia a Collapse-Rows (Contraer filas) ( Two arrows, one pointing up to a line and one pointing down to the same line ), que puede elegir para contraer la lista de claves de propiedad secundarias.

  3. Modifique el esquema mediante las siguientes acciones en la sección situada en la parte derecha de la página:

    • Para cambiar el nombre de una clave de propiedad, coloque el cursor en el cuadro de texto Key (Clave) para la clave de propiedad y, a continuación, escriba el nuevo nombre.

    • Para cambiar el tipo de datos de una clave de propiedad, utilice la lista para elegir un nuevo tipo de datos para la clave de propiedad.

    • Para agregar una nueva clave de propiedad de nivel superior al esquema, elija el ícono Overflow (Desbordamiento) ( An ellipsis (...) ) a la izquierda del botón Cancel (Cancelar) y luego elija Add root key (Agregar clave raíz).

    • Para agregar una clave de propiedad secundaria al esquema, elija el ícono Add-Key (Agrega clave) A rectangle with a plus sign in the bottom left corner asociado a la clave principal. Escriba un nombre para la clave secundaria y elija el tipo de datos.

    • Para eliminar una clave de propiedad del esquema, elija el ícono Remove (Eliminar) ( An outline of a trash can ) en el extremo derecho del nombre de la clave.

  4. Si su código de transformación personalizado utiliza múltiples DynamicFrames, puede agregar esquemas de salida adicionales.

    • Para agregar un esquema nuevo, vacío, elija la opción Overflow (Desbordamiento) ( An ellipsis (...) ) y, a continuación, elija Add output schema (Agregar esquema de salida).

    • Para copiar un esquema existente en un nuevo esquema de salida, asegúrese de que el esquema que desea copiar se muestra en el selector de esquema. Elija el ícono Overflow (Desbordamiento) ( An ellipsis (...) ) y, a continuación, elija Duplicate (Duplicar).

    Si desea eliminar un esquema de salida, asegúrese de que el esquema que desea copiar se muestra en el selector de esquema. Elija el ícono Overflow (Desbordamiento) ( An ellipsis (...) ) y, a continuación, elija Delete (Eliminar).

  5. Agregue nuevas claves raíz al nuevo esquema o edite las claves duplicadas.

  6. Cuando modifique los esquemas de salida, elija el botón Apply (Aplicar) para guardar los cambios y salir del editor de esquemas.

    Si no desea guardar los cambios, elija Cancel (Cancelar).

Configurar la salida de transformación personalizada

Una transformación de código personalizado devuelve una recopilación de DynamicFrames, aún cuando haya solo un DynamicFrame en el conjunto de resultados.

Para procesar la salida desde un nodo de transformación personalizado
  1. Agregue un nodo de transformación SelectFromCollection (Seleccionar desde la recopilación), que tenga el nodo de transformación personalizado como su nodo principal. Actualice esta transformación para indicar qué conjunto de datos desea utilizar. Para obtener más información, consulte Uso de SelectFromCollection (Seleccionar desde la recopilación) para elegir qué conjunto de datos desea mantener.

  2. Agregue una transformación Seleccionar desde recopilación adicional al diagrama de trabajo si desea utilizar DynamicFrames adicionales, producidos por el nodo de transformación personalizado.

    Considere un escenario en el que agrega un nodo de transformación personalizado para dividir un conjunto de datos de vuelo en varios conjuntos de datos, pero duplica algunas de las claves de propiedad de identificación en cada esquema de salida, como la fecha de vuelo o el número de vuelo. Agregue un nodo de transformación Seleccionar desde la recopilación para cada esquema de salida, con el nodo de transformación personalizado como su nodo principal.

  3. (Opcional) a continuación, puede usar cada nodo de transformación Seleccionar desde la recopilación como entrada para otros nodos del trabajo, o como nodo principal para un nodo de destino de datos.