本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon EMR Data Quality
採用 AWS Glue Data Quality 技術的 Amazon EMR Data Quality 可讓您測量和監控 EMR Serverless Spark 工作負載讀取和寫入的資料品質,而無需離開 Spark 應用程式。此頁面涵蓋 EMR Serverless 先決條件和演練。如需概念、APIs、監控和故障診斷,請參閱《Amazon EMR 管理指南》中的 Amazon EMR Data Quality。
先決條件
根據預設,Amazon EMR Data Quality 會安裝在 emr-spark-8.1.0 及更新版本中。僅支援 Apache Spark 工作負載。
EMR Serverless 應用程式擔任的 IAM 任務執行期角色 (在 --execution-role-arn上透過 傳遞start-job-run) 必須授予下列許可,才能執行 Data Quality 和發佈結果。
| Action | 適用時機 |
|---|---|
glue:PublishDataQuality |
將每個評估發佈到 AWS Glue Data Quality,以便您可以檢視歷史記錄、比較執行和饋送異常偵測。發佈預設為開啟 (enableDataQualityResultsPublishing 為 True),因此除非您將 選項設定為 明確選擇退出,否則請授予此許可False。 |
glue:AccessDataQualityRuntimeConfiguration |
在程式庫初始化發佈時,從服務擷取發佈組態。啟用發佈時需要;如果沒有,程式庫會無提示地停用執行的發佈。 |
cloudwatch:PutMetricData |
若要針對儀表板和警示向 Amazon CloudWatch 發出每次執行傳遞和失敗指標。只有在您將 enableDataQualityCloudWatchMetrics設定為 時才需要True。 |
glue:GetTable, glue:GetDatabase |
讀取目錄資料表中繼資料。從 Glue Data Catalog AWS 資料表讀取輸入 DataFrame 時,或當應用程式通過 ,publishToDataCatalogTarget讓服務可以將執行歸因於特定目錄資料表時,此為必要項目。 |
glue:GetDataQualityRuleset |
從 Glue Data Catalog AWS 擷取儲存的規則集。只有在 Spark 指令碼從目錄載入規則集,而不是定義 DQDL 內嵌時才需要。請參閱從 Glue Data Catalog AWS 擷取儲存的規則集。 |
下列內嵌政策會授予從 EMR Serverless Spark 應用程式發佈 Data Quality 結果所需的最低許可集。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "GlueDataQuality", "Effect": "Allow", "Action": [ "glue:PublishDataQuality", "glue:AccessDataQualityRuntimeConfiguration" ], "Resource": "*" } ] }
執行您的第一次評估
-
建立 EMR Serverless 應用程式。使用版本
emr-spark-8.1.0或更新版本。建立 Spark 應用程式並連接具有 中所列許可的任務角色先決條件。例如,若要建立 Spark 應用程式,請執行:
aws emr-serverless create-application \ --name My_Spark_DataQuality_Application \ --release-label emr-spark-8.1.0 \ --type SPARK -
定義規則集並進行評估。下列 PySpark 指令碼會在 DQDL 中定義規則集、針對 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)resultsDataFrame 每個規則包含一個資料列,其中包含下列資料欄:Rule、FailureReason、Outcome和EvaluatedMetrics。具有Outcome之 的資料列Failed包含 中觀察到的值FailureReason。 -
提交任務執行。提交指令碼做為針對您的應用程式執行的任務。
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" } }' -
擷取結果。任務執行完成後,列出執行,並使用 AWS Glue Data Quality APIs或 擷取其詳細資訊 AWS CLI。如果您的應用程式也
publishToDataCatalogTarget使用DatabaseName和 設定TableName,則執行會顯示在 Glue AWS 主控台中該目錄資料表的資料品質索引標籤上。aws glue list-data-quality-results-v2 --max-results 5 aws glue get-data-quality-result-v2 --result-id<result-id>
進一步了解 Amazon EMR Data Quality
如需完整參考,請參閱《Amazon EMR 管理指南》中的下列主題: