View a markdown version of this page

Introducción a Amazon EMR Data Quality - Amazon EMR

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.

Introducción a Amazon EMR Data Quality

En esta sección, se explica cómo realizar su primera evaluación de calidad de datos de Amazon EMR de principio a fin: los permisos que necesita su aplicación Amazon EMR Spark y un tutorial que presenta un conjunto de reglas de DQDL para un EMR de Amazon y recupera DataFrame el resultado.

Requisitos previos

Permisos de IAM

La función de IAM que asume su carga de trabajo de Amazon EMR Spark (el perfil de instancia EC2 adjunto al clúster o una función de tiempo de ejecución por paso) debe conceder los siguientes permisos para ejecutar Data Quality y publicar los resultados.

Action Cuando sea necesario
glue:PublishDataQuality Publicar cada evaluación en AWS Glue Data Quality para que puedas ver el historial, comparar ejecuciones y alimentar la detección de anomalías. La publicación está activada de forma predeterminada (enableDataQualityResultsPublishingesTrue), por lo que debes conceder este permiso a menos que optes por excluirlo explícitamente configurando la opción en. False
glue:AccessDataQualityRuntimeConfiguration Para obtener la configuración de publicación del servicio cuando la biblioteca inicialice la publicación. Se requiere siempre que la publicación esté habilitada; sin ella, la biblioteca inhabilita la publicación de forma silenciosa durante la ejecución.
cloudwatch:PutMetricData Emitir métricas de aprobación y rechazo por ejecución a Amazon CloudWatch para paneles y alarmas. Necesario solo cuando se configura enenableDataQualityCloudWatchMetrics. True
glue:GetTable, glue:GetDatabase Para leer los metadatos de la tabla de catálogo. Se requiere cuando la entrada DataFrame se lee de una tabla del catálogo de datos de AWS Glue o cuando la aplicación la aprueba publishToDataCatalogTarget para que el servicio pueda atribuir la ejecución a una tabla de catálogo específica.
glue:GetDataQualityRuleset Para obtener un conjunto de reglas guardado del catálogo de datos de AWS Glue. Solo se requiere cuando el script de Spark carga un conjunto de reglas del catálogo en lugar de definir el DQDL en línea. Consulte Obtener un conjunto de reglas guardado del AWS Catálogo de datos de Glue.

La siguiente política en línea otorga el conjunto mínimo de permisos necesarios para publicar los resultados de calidad de los datos desde una aplicación Amazon EMR Spark.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GlueDataQuality", "Effect": "Allow", "Action": [ "glue:PublishDataQuality", "glue:AccessDataQualityRuntimeConfiguration" ], "Resource": "*" } ] }

Realice su primera evaluación

  1. Cree un clúster o una aplicación de Amazon EMR. Utilice la versión emr-spark-8.1.0 o posterior en Amazon EMR en EC2, Amazon EMR en EKS o Amazon EMR Serverless. Adjunte un rol que tenga los permisos que se indican en. Permisos de IAM

    Por ejemplo, para crear un clúster de Amazon EMR en EC2, ejecute:

    aws emr create-cluster --release-label emr-spark-8.1.0 \ --applications Name=Spark \ --region us-east-1 \ --name My_Spark_DataQuality_Cluster \ --log-uri s3://amzn-s3-demo-bucket/ \ --instance-type m5.xlarge \ --instance-count 2 \ --service-role EMR_DefaultRole_V2 \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef0
  2. Defina un conjunto de reglas y evalúelo. El siguiente PySpark script define un conjunto de reglas en el DQDL, lo compara con una e imprime el resultado por regla DataFrame.

    from pyspark.sql import SparkSession from awsdataquality.transforms import EvaluateDataQuality spark = SparkSession.builder.appName("dq-example").getOrCreate() df = spark.read.parquet("s3://amzn-s3-demo-bucket/orders/") ruleset = """ Rules = [ RowCount > 1000, IsComplete "order_id", IsUnique "order_id", ColumnValues "status" in ["PLACED", "SHIPPED", "CANCELED"], Mean "order_total" between 10 and 500 ] """ results = EvaluateDataQuality.apply( frame=df, ruleset=ruleset, publishing_options={ "dataQualityEvaluationContext": "orders_daily", "enableDataQualityResultsPublishing": True, }, ) results.show(truncate=False)

    results DataFrame Contiene una fila por regla con las siguientes columnas:Rule,, y. Outcome FailureReason EvaluatedMetrics Las filas con un Outcome de Failed incluyen el valor observado enFailureReason.

  3. Envíe la solicitud. Envía el script de la misma manera que envías cualquier otra aplicación de Spark para tu modo de despliegue de Amazon EMR.

    Amazon EMR on EC2
    aws emr add-steps --cluster-id j-1234567890ABC \ --steps Type=Spark,Name="dq-example",ActionOnFailure=CONTINUE,Args=[s3://amzn-s3-demo-bucket/scripts/dq_example.py]
    Amazon EMR on EKS
    aws emr-containers start-job-run \ --virtual-cluster-id <virtual-cluster-id> \ --name dq-example \ --execution-role-arn <execution-role-arn> \ --release-label emr-spark-8.1.0 \ --job-driver '{ "sparkSubmitJobDriver": { "entryPoint": "s3://amzn-s3-demo-bucket/scripts/dq_example.py" } }'
    Amazon EMR Serverless
    aws emr-serverless start-job-run \ --application-id <application-id> \ --execution-role-arn <execution-role-arn> \ --name dq-example \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://amzn-s3-demo-bucket/scripts/dq_example.py" } }'
  4. Recupera el resultado. Cuando la aplicación finalice, enumere la ejecución y obtenga sus detalles con las API de calidad de datos de AWS Glue o con. AWS CLI Si la aplicación también se configura publishToDataCatalogTarget con una DatabaseName yTableName, la ejecución aparecerá en la pestaña Calidad de los datos de esa tabla de catálogo en la consola de AWS Glue (consulteVisualización de los resultados en AWS Consola Glue). De lo contrario, usa la API o AWS CLI recupera la ejecución.

    aws glue list-data-quality-results-v2 --max-results 5 aws glue get-data-quality-result-v2 --result-id <result-id>

    Para reducir la lista a las ejecuciones de un conjunto de datos específico, pasa el conjunto de datos EvaluationContext que utilizó tu aplicación (por ejemplo,orders_daily) aListDataQualityStatistics. Cuando la aplicación lee una tabla del catálogo de datos de AWS Glue, también puede filtrar list-data-quality-results-v2 porDataSource.GlueTable.

Obtener un conjunto de reglas guardado del AWS Catálogo de datos de Glue

En lugar de definir tu conjunto de reglas en línea en cada script de Spark, puedes crear un conjunto de reglas una vez en el catálogo de datos de AWS Glue y obtenerlo de tu aplicación Amazon EMR Spark en tiempo de ejecución. Esto le permite versionar un conjunto de reglas en un solo lugar y compartirlo entre las cargas de trabajo de Amazon EMR Spark, los trabajos de AWS Glue ETL y las evaluaciones.

  1. Crea el conjunto de reglas en Glue AWS . Crea y guarda el conjunto de reglas mediante una de las siguientes rutas:

  2. Concede acceso al rol de carga de trabajo de Spark. Añada glue:GetDataQualityRuleset a la función que asume su aplicación Amazon EMR Spark.

  3. Busca el conjunto de reglas en tu script de Spark. Llama GetDataQualityRuleset con boto3, extrae el Ruleset campo y pasa la cadena DQDL a. EvaluateDataQuality.apply

    import boto3 from awsdataquality.transforms import EvaluateDataQuality glue = boto3.client("glue") response = glue.get_data_quality_ruleset(Name="orders_quality") ruleset = response["Ruleset"] results = EvaluateDataQuality.apply( frame=df, ruleset=ruleset, publishing_options={ "dataQualityEvaluationContext": "orders_daily", "enableDataQualityResultsPublishing": True, }, )