Clase Map - AWS Glue

Clase Map

Genera un nuevo DynamicFrame al aplicar una función a todos los registros de la entrada DynamicFrame.

Methods

__call__(frame, f, transformation_ctx="", info="", stageThreshold=0, totalThreshold=0)

Muestra un nuevo DynamicFrame que se obtiene al aplicar la función especificada a todos los DynamicRecords en el DynamicFrame original.

  • frame: el DynamicFrame original al que se aplica la función de mapeo (obligatorio).

  • f: la función que se aplica a todos los DynamicRecords en el DynamicFrame. La función debe utilizar un DynamicRecord como argumento y devolver un DynamicRecord nuevo que se genera mediante el mapeo (obligatorio).

    Un DynamicRecord representa un registro lógico en un DynamicFrame. Es similar a una fila en un DataFrame de Apache Spark, salvo que es autodescriptivo y se puede utilizar para datos que no se ajustan a un esquema fijo.

  • transformation_ctx: cadena única que se utiliza para identificar la información del estado (opcional).

  • info: cadena que está asociada a errores en la transformación (opcional).

  • stageThreshold: número máximo de errores que se pueden producir en la transformación antes de que se determine que es errónea (opcional, el valor predeterminado es cero).

  • totalThreshold: número máximo de errores que se pueden producir en total antes de que se determine que el proceso es erróneo (opcional, el valor predeterminado es cero).

Muestra un nuevo DynamicFrame que se obtiene al aplicar la función especificada a todos los DynamicRecords en el DynamicFrame original.

apply(cls, *args, **kwargs)

Heredado de GlueTransform apply.

name(cls)

Heredado de GlueTransform name.

describeArgs(cls)

Heredado de GlueTransform describeArgs.

describeReturn(cls)

Heredado de GlueTransform describeReturn.

describeTransform(cls)

Heredado de GlueTransform describeTransform.

describeErrors(cls)

Heredado de GlueTransform describeErrors.

describe(cls)

Heredado de GlueTransform describe.

AWS GlueEjemplo de Python de

Este ejemplo utiliza la transformación Map para combinar varios campos en un tipo de struct. El conjunto de datos que se utiliza en este ejemplo está formado por datos de pago de Medicare Provider que se descargaron de dos sitios de Data.CMS.gov, conjuntos de datos: "Inpatient Prospective Payment System Provider Summary for the Top 100 Diagnosis-Related Groups - FY2011" e "Inpatient Charge Data FY 2011".

Después de descargar los datos de ejemplo, los modificamos para presentar un par de registros erróneos al final del archivo. Este archivo modificado se encuentra en un bucket público de Amazon S3 en s3://awsglue-datasets/examples/medicare/Medicare_Hospital_Provider.csv. Para ver otro ejemplo donde se utilice este conjunto de datos, consulte Ejemplo de código: preparación de datos con ResolveChoice, Lambda y ApplyMapping.

Para empezar, cree un archivo llamado DynamicFrame para los datos:

from awsglue.context import GlueContext from awsglue.transforms import * from pyspark.context import SparkContext glueContext = GlueContext(SparkContext.getOrCreate()) dyF = glueContext.create_dynamic_frame.from_options( 's3', {'paths': ['s3://awsglue-datasets/examples/medicare/Medicare_Hospital_Provider.csv']}, 'csv', {'withHeader': True}) print "Full record count: ", dyF.count() dyF.printSchema()

La salida de este código debe ser como sigue:

Full record count: 163065L root |-- DRG Definition: string |-- Provider Id: string |-- Provider Name: string |-- Provider Street Address: string |-- Provider City: string |-- Provider State: string |-- Provider Zip Code: string |-- Hospital Referral Region Description: string |-- Total Discharges: string |-- Average Covered Charges: string |-- Average Total Payments: string |-- Average Medicare Payments: string

A continuación, cree una función de mapeo para combinar los campos de la dirección de proveedor en un DynamicRecord dentro de una struct y, después, elimine los campos de dirección individuales:

def MergeAddress(rec): rec["Address"] = {} rec["Address"]["Street"] = rec["Provider Street Address"] rec["Address"]["City"] = rec["Provider City"] rec["Address"]["State"] = rec["Provider State"] rec["Address"]["Zip.Code"] = rec["Provider Zip Code"] rec["Address"]["Array"] = [rec["Provider Street Address"], rec["Provider City"], rec["Provider State"], rec["Provider Zip Code"]] del rec["Provider Street Address"] del rec["Provider City"] del rec["Provider State"] del rec["Provider Zip Code"] return rec

En esta función de mapeo, la línea rec["Address"] = {} crea un diccionario en la entrada de DynamicRecord que contiene la nueva estructura.

nota

Los campos map de Python no se admiten aquí. Por ejemplo, no puede haber líneas como la siguiente:

rec["Addresses"] = [] # ILLEGAL!

Las líneas como rec["Address"]["Street"] = rec["Provider Street Address"] agregan campos a la nueva estructura con la sintaxis del diccionario de Python.

Después añadir las líneas de dirección a la estructura nueva, las líneas del tipo del rec["Provider Street Address"] eliminan los campos individuales de DynamicRecord.

Ahora puede utilizar la transformación Map para aplicar la función de mapeo a todos los DynamicRecords en DynamicFrame.

mapped_dyF = Map.apply(frame = dyF, f = MergeAddress) mapped_dyF.printSchema()

La salida es la siguiente:

root |-- Average Total Payments: string |-- Average Covered Charges: string |-- DRG Definition: string |-- Average Medicare Payments: string |-- Hospital Referral Region Description: string |-- Address: struct | |-- Zip.Code: string | |-- City: string | |-- Array: array | | |-- element: string | |-- State: string | |-- Street: string |-- Provider Id: string |-- Total Discharges: string |-- Provider Name: string