教學課程:在 AWS Glue for Ray 中撰寫 ETL 指令碼 - AWS Glue

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:在 AWS Glue for Ray 中撰寫 ETL 指令碼

Ray 可讓您在 Python 中以原生方式撰寫和擴展分散式任務。AWS Glue for Ray 提供無伺服器 Ray 環境,可讓您同時存取任務與互動式工作階段 (Ray 互動式工作階段為預覽版)。AWS Glue 任務系統可讓您運用一致的方式來管理和執行任務,包括按排程、透過觸發或從 AWS Glue 主控台進行。

結合這些 AWS Glue 工具可建立強大的工具鏈,讓您用來擷取、轉換和載入 (ETL) 工作負載,此為最受歡迎的 AWS Glue 使用案例。在本教學課程中,您將了解整合使用此解決方案的基礎概念。

我們也支援使用適用於 Spark 的 AWS Glue 來處理 ETL 工作負載。如需有關撰寫適用於 Spark 的 AWS Glue 指令碼的教學課程,請參閱 教學課程:撰寫 Spark 指令碼的 AWS Glue。如需有關可用引擎的詳細資訊,請參閱 AWS Glue for Spark 與 AWS Glue for Ray。Ray 能夠在分析、機器學習 (ML) 和應用程式開發過程中處理眾多不同類型的任務。

在本教學課程中,您將擷取、轉換和載入在 Amazon Simple Storage Service (Amazon S3) 中託管的 CSV 資料集。您將從存放在公有 Amazon S3 儲存貯體中的紐約市計程車禮車委員會 (TLC) 行程記錄資料集開始。如需有關此資料集的詳細資訊,請參閱 AWS 上的開放資料登錄檔

您將使用 Ray Data 程式庫中可用的預先定義轉換來轉換資料。Ray Data 是由 Ray 設計的資料集準備程式庫,預設包含在 AWS Glue for Ray 環境中。如需有關這些預設內含程式庫的詳細資訊,請參閱 Ray 任務隨附的模組。接著,您可以將轉換後的資料寫入您控制的 Amazon S3 儲存貯體。

先決條件:在本教學課程中,您需要一個可存取 AWS Glue 和 Amazon S3 的 AWS 帳戶。

步驟 1:在 Amazon S3 中建立儲存貯體以保存您的輸出資料

您將需要一個由您控制的 Amazon S3 儲存貯體,作為本教學課程中所建立資料的接收器。您可以使用下列程序建立此儲存貯體。

注意

如果您想要將資料寫入您控制的現有儲存貯體,則可略過此步驟。記下 yourBucketName (現有儲存貯體的名稱),以便在後續步驟中使用。

為 Ray 任務輸出建立儲存貯體
  • 按照《Amazon S3 使用者指南》建立儲存貯體中所述的步驟,建立儲存貯體。

    • 選擇儲存貯體名稱時,請記下 yourBucketName,您將在後續步驟中參考該名稱。

    • 對於其他組態,Amazon S3 主控台中提供的建議設定應可在本教學課程中正常運作。

    舉例來說,儲存貯體建立對話方塊在 Amazon S3 主控台中可能看起來會像這樣。

    Amazon S3 主控台中的對話方塊,用於設定新儲存貯體。

步驟 2:為 Ray 任務建立 IAM 角色與政策

您的任務將需要具有以下內容的 AWS Identity and Access Management (IAM) 角色:

  • AWSGlueServiceRole 受管政策授予的許可。這些是執行 AWS Glue 任務所需的基本許可。

  • 適用於 nyc-tlc/* Amazon S3 資源的 Read 存取層級許可。

  • 適用於 yourBucketName/* Amazon S3 資源的 Write 存取層級許可。

  • 可讓 glue.amazonaws.com 主體擔任角色的信任關係。

您可以使用下列程序建立此角色。

為 AWS Glue for Ray 任務建立 IAM 角色
注意

您可以按照許多不同的程序建立 IAM 角色。如需有關如何佈建 IAM 資源的詳細資訊或選項,請參閱 AWS Identity and Access Management 文件

  1. 依照《IAM 使用者指南》使用視覺化編輯器來建立 IAM 政策 (主控台) 所述的下列步驟,建立政策以定義先前所述的 Amazon S3 許可。

    • 選取服務時,請選擇 Amazon S3。

    • 選取政策的許可時,請針對下列資源 (先前所述) 附加下列動作集:

      • 適用於 nyc-tlc/* Amazon S3 資源的讀取存取層級許可。

      • 適用於 yourBucketName/* Amazon S3 資源的寫入存取層級許可。

    • 選取政策名稱時,請記下 YourPolicyName,您將在後續步驟中參考該名稱。

  2. 依照《IAM 使用者指南》為 AWS 服務建立角色 (主控台) 所述的步驟,為 AWS Glue for Ray 任務建立角色。

    • 選取信任的 AWS 服務實體時,請選擇 Glue。這會自動為您的任務填入必要的信任關係。

    • 選取許可政策的政策時,請附加下列政策:

      • AWSGlueServiceRole

      • YourPolicyName

    • 選取角色名稱時,請記下 YourRoleName,您將在後續步驟中參考該名稱。

步驟 3:建立並執行 AWS Glue for Ray 任務。

在此步驟中,您需使用 AWS Management Console 建立 AWS Glue 任務、為其提供範例指令碼以及執行任務。當您建立任務時,系統會在主控台中建立一個位置,供您存放、設定和編輯 Ray 指令碼。如需有關建立任務的詳細資訊,請參閱登入 AWS Glue 主控台

在本教學課程中,我們會討論以下 ETL 案例:您想要從 紐約市計程車禮車委員會 (TLC) 行程記錄資料集中讀取 2022 年 1 月的記錄,透過合併現有資料欄中的資料,在資料集中新增資料欄 (tip_rate),然後移除一些與目前分析無關的資料欄,接著再將結果寫入 yourBucketName。下列 Ray 指令碼會執行這些步驟:

import ray import pandas from ray import data ray.init('auto') ds = ray.data.read_csv("s3://nyc-tlc/opendata_repo/opendata_webconvert/yellow/yellow_tripdata_2022-01.csv") # Add the given new column to the dataset and show the sample record after adding a new column ds = ds.add_column( "tip_rate", lambda df: df["tip_amount"] / df["total_amount"]) # Dropping few columns from the underlying Dataset ds = ds.drop_columns(["payment_type", "fare_amount", "extra", "tolls_amount", "improvement_surcharge"]) ds.write_parquet("s3://yourBucketName/ray/tutorial/output/")
建立並執行 AWS Glue for Ray 任務
  1. 在 AWS Management Console 中,導覽至 AWS Glue 登陸頁面。

  2. 在側邊的導覽窗格中,選擇 ETL 任務

  3. 建立任務中,選擇 Ray 指令碼編輯器,然後選擇建立,如下圖所示。

    AWS Glue 控制台中的對話方塊,用於建立 Ray 任務。
  4. 將指令碼的全文貼至指令碼窗格中,並替換任何現有的文字。

  5. 導覽至任務詳細資訊,並將 IAM 角色屬性設定為 YourRoleName

  6. 選擇儲存,然後選擇執行

步驟 4:檢查輸出

執行 AWS Glue 任務之後,您應驗證輸出符合此案例的期望值。若要執行此作業,請依照下列程序操作。

驗證您的 Ray 任務是否順利執行
  1. 在任務詳細資訊頁面上,導覽至執行

  2. 幾分鐘後,您應會看到執行狀態成功的執行。

  3. https://console.aws.amazon.com/s3/ 上導覽至 Amazon S3 主控台,並檢查 yourBucketName。您應會看到寫入輸出儲存貯體的檔案。

  4. 讀取 Parquet 檔案並驗證其內容。您可以使用現有工具執行此操作。如果您沒有驗證 Parquet 檔案的程序,可透過 AWS Glue 互動式工作階段,在 AWS Glue 主控台中使用 Spark 或 Ray (預覽版) 執行此操作。

    在互動式工作階段中,您可以存取預設提供的 Ray Data、Spark 或 pandas 程式庫 (根據您選擇的引擎)。若要驗證您的檔案內容,您可使用適用於這些程式庫的常用檢查方法,例如 countschemashow 等。如需有關主控台中互動式工作階段的詳細資訊,請參閱 Using notebooks with AWS Glue Studio and AWS Glue

    由於您已確認檔案寫入儲存貯體,您可以相對地確認若輸出有任何問題,則與 IAM 組態無關。使用 yourRoleName 設定工作階段,以存取相關檔案。

若結果不如預期,請檢查本指南中的疑難排解內容,以識別並修復錯誤的來源。若要解譯任務執行錯誤狀態,請參閱 AWS Glue 任務執行狀態。您可以在 AWS Glue 疑難排解 一章中找到疑難排解內容。如需了解與 Ray 任務相關的特定錯誤,請參閱疑難排解一章中的 對日誌中的 AWS Glue for Ray 錯誤進行疑難排解

後續步驟

您現已充分了解並使用 AWS Glue for Ray 執行 ETL 程序。您可使用下列資源了解 AWS Glue for Ray 提供哪些工具來大規模轉換和解譯資料。