以 AWS Glue 使用 Python 程式庫 - AWS Glue

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

以 AWS Glue 使用 Python 程式庫

AWS Glue 可讓您安裝額外的 Python 模組和程式庫,以便搭配 AWS Glue ETL 使用。

使用 pip 在 AWS Glue 2.0+ 中安裝其他 Python 模組

AWS Glue 使用 Python Package Installer (pip3) 來安裝 AWS Glue ETL 使用的其他模組。您可以使用 --additional-python-modules 參數與逗號分隔的 Python 模組清單來新增新模組或變更現有模組的版本。您可以將分佈上傳到 Amazon S3 來安裝程式庫的自訂發行版本,然後在模組清單中包含 Amazon S3 物件的路徑。

您可以使用 --python-modules-installer-option 參數將其他選項傳遞給 pip3。例如,您可以傳遞 "--upgrade" 來升級由 "--additional-python-modules" 指定的套件。如需更多範例,請參閱使用 AWS Glue 2.0 從輪子為 Spark ETL 工作負載建置 Python 模組

如果您的 Python 相依性以傳遞方式取決於原生、已編譯的程式碼,您可能會執行下列限制: AWS Glue 不支援在工作環境中編譯原生程式碼。不過, AWS Glue 任務會在 Amazon Linux 2 環境中執行。透過 Wheel 分發套件,您也許能夠以編譯形式提供原生相依性。

例如,要更新或新增新的 scikit-learn 模組,請使用以下鍵/值:"--additional-python-modules", "scikit-learn==0.21.3"

此外,在 --additional-python-modules 選項中,您可以指定 Python wheel 模組的 Amazon S3 路徑。例如:

--additional-python-modules s3://aws-glue-native-spark/tests/j4.2/ephem-3.7.7.1-cp37-cp37m-linux_x86_64.whl,s3://aws-glue-native-spark/tests/j4.2/fbprophet-0.6-py3-none-any.whl,scikit-learn==0.21.3

您可以--additional-python-modules在AWS Glue主控台的 [Job 參數] 欄位中指定,或透過變更 AWS SDK 中的工作引數來指定。如需有關設定任務參數的詳細資訊,請參閱 在 AWS Glue 工作中使用工作參數

包括具有 PySpark 本地功能的 Python 文件

AWS Glue用 PySpark 來在 AWS Glue ETL 工作中包含 Python 檔案。您需使用可用的 --additional-python-modules 管理相依性。您可以使用 --extra-py-files 任務參數來包含 Python 檔案。相依性必須在 Amazon S3 中託管,且引數值應為以逗號分隔的 Amazon S3 路徑清單,並不含空格。此功能的行為類似於您搭配 Spark 使用的 Python 相依性管理。如需 Spark 中 Python 相依性管理的詳細資訊,請參閱 Apache Spark 文件中的使用 PySpark 原生功能頁面。 --extra-py-files在未封裝其他程式碼的情況下,或者當您移轉具有現有工具鏈的 Spark 程式以管理相依性時非常有用。為了使您的相依性工具可維護,您必須在提交之前綁定相依性。

使用視覺轉換的程式設計腳本

使用 AWS Glue Studio 視覺化介面建立 AWS Glue 工作時,您可以使用受管資料轉換節點和自訂視覺化轉換來轉換資料。如需受管資料轉換節點的詳細資訊,請參閱使用AWS Glue受管轉換來轉換資料。如需有關自訂視覺轉換的詳細資訊,請參閱 使用自訂視覺轉換來轉換資料 。只有當工作 [語言] 設定為使用 Python 時,才能產生使用視覺轉換的指令碼。

使用視覺化轉換產生 AWS Glue 工作時, AWS Glue Studio 會使用工作組態中的--extra-py-files參數,在執行階段環境中包含這些轉換。如需有關任務參數的詳細資訊,請參閱 在 AWS Glue 工作中使用工作參數。變更產生的指令碼或執行階段環境時,您必須保留此工作組態,指令碼才能順利執行。

AWS Glue 中已提供 Python 模組

若要變更這些已提供模組的版本,請提供帶有 --additional-python-modules 任務參數的新版本。

AWS Glue version 2.0

AWS Glue 2.0 版包含以下開箱即用的 Python 模組:

  • avro-python3==1.10.0

  • awscli==1.27.60

  • boto3==1.12.4

  • botocore==1.15.4

  • certifi==2019.11.28

  • chardet==3.0.4

  • click==8.1.3

  • colorama==0.4.4

  • cycler==0.10.0

  • Cython==0.29.15

  • docutils==0.15.2

  • enum34==1.1.9

  • fsspec==0.6.2

  • idna==2.9

  • importlib-metadata==6.0.0

  • jmespath==0.9.4

  • joblib==0.14.1

  • kiwisolver==1.1.0

  • matplotlib==3.1.3

  • mpmath==1.1.0

  • nltk==3.5

  • numpy==1.18.1

  • pandas==1.0.1

  • patsy==0.5.1

  • pmdarima==1.5.3

  • ptvsd==4.3.2

  • pyarrow==0.16.0

  • pyasn1==0.4.8

  • pydevd==1.9.0

  • pyhocon==0.3.54

  • PyMy平方米

  • pyparsing==2.4.6

  • python-dateutil==2.8.1

  • pytz==2019.3

  • PyYAML==5.3.1

  • regex==2022.10.31

  • requests==2.23.0

  • rsa==4.7.2

  • s3fs==0.4.0

  • s3transfer==0.3.3

  • scikit-learn==0.22.1

  • scipy==1.4.1

  • setuptools==45.2.0

  • six==1.14.0

  • Spark==1.0

  • statsmodels==0.11.1

  • subprocess32==3.5.4

  • sympy==1.5.1

  • tbats==1.0.9

  • tqdm==4.64.1

  • typing-extensions==4.4.0

  • urllib3==1.25.8

  • wheel==0.35.1

  • zipp==3.12.0

AWS Glue 版本 3.0

AWS Glue 3.0 版包含以下開箱即用的 Python 模組:

  • aiobotocore==1.4.2

  • aiohttp==3.8.3

  • aioitertools==0.11.0

  • aiosignal==1.3.1

  • async-timeout==4.0.2

  • asynctest==0.13.0

  • attrs==22.2.0

  • avro-python3==1.10.2

  • boto3==1.18.50

  • botocore==1.21.50

  • certifi==2021.5.30

  • chardet==3.0.4

  • charset-normalizer==2.1.1

  • click==8.1.3

  • cycler==0.10.0

  • Cython==0.29.4

  • docutils==0.17.1

  • enum34==1.1.10

  • frozenlist==1.3.3

  • fsspec==2021.8.1

  • idna==2.10

  • importlib-metadata==6.0.0

  • jmespath==0.10.0

  • joblib==1.0.1

  • kiwisolver==1.3.2

  • matplotlib==3.4.3

  • mpmath==1.2.1

  • multidict==6.0.4

  • nltk==3.6.3

  • numpy==1.19.5

  • packaging==23.0

  • pandas==1.3.2

  • patsy==0.5.1

  • Pillow==9.4.0

  • pip==23.0

  • pmdarima==1.8.2

  • ptvsd==4.3.2

  • pyarrow==5.0.0

  • pydevd==2.5.0

  • pyhocon==0.3.58

  • PyMy平方米

  • pyparsing==2.4.7

  • python-dateutil==2.8.2

  • pytz==2021.1

  • PyYAML==5.4.1

  • regex==2022.10.31

  • requests==2.23.0

  • s3fs==2021.8.1

  • s3transfer==0.5.0

  • scikit-learn==0.24.2

  • scipy==1.7.1

  • six==1.16.0

  • Spark==1.0

  • statsmodels==0.12.2

  • subprocess32==3.5.4

  • sympy==1.8

  • tbats==1.1.0

  • threadpoolctl==3.1.0

  • tqdm==4.64.1

  • typing_extensions==4.4.0

  • urllib3==1.25.11

  • wheel==0.37.0

  • wrapt==1.14.1

  • yarl==1.8.2

  • zipp==3.12.0

AWS Glue 版本 4.0

AWS Glue 4.0 版包含以下開箱即用的 Python 模組:

  • aiobotocore==2.4.1

  • aiohttp==3.8.3

  • aioitertools==0.11.0

  • aiosignal==1.3.1

  • async-timeout==4.0.2

  • asynctest==0.13.0

  • attrs==22.2.0

  • avro-python3==1.10.2

  • boto3==1.24.70

  • botocore==1.27.59

  • certifi==2021.5.30

  • chardet==3.0.4

  • charset-normalizer==2.1.1

  • click==8.1.3

  • cycler==0.10.0

  • Cython==0.29.32

  • docutils==0.17.1

  • enum34==1.1.10

  • frozenlist==1.3.3

  • fsspec==2021.8.1

  • idna==2.10

  • importlib-metadata==5.0.0

  • jmespath==0.10.0

  • joblib==1.0.1

  • 萬花筒

  • kiwisolver==1.4.4

  • matplotlib==3.4.3

  • mpmath==1.2.1

  • multidict==6.0.4

  • nltk==3.7

  • numpy==1.23.5

  • packaging==23.0

  • pandas==1.5.1

  • patsy==0.5.1

  • Pillow==9.4.0

  • pip==23.0.1

  • 大概地

  • pmdarima==2.0.1

  • ptvsd==4.3.2

  • pyarrow==10.0.0

  • pydevd==2.5.0

  • pyhocon==0.3.58

  • PyMy平方米

  • pyparsing==2.4.7

  • python-dateutil==2.8.2

  • pytz==2021.1

  • PyYAML==6.0.1

  • regex==2022.10.31

  • requests==2.23.0

  • s3fs==2022.11.0

  • s3transfer==0.6.0

  • scikit-learn==1.1.3

  • scipy==1.9.3

  • setuptools==49.1.3

  • six==1.16.0

  • statsmodels==0.13.5

  • subprocess32==3.5.4

  • sympy==1.8

  • tbats==1.1.0

  • threadpoolctl==3.1.0

  • tqdm==4.64.1

  • typing_extensions==4.4.0

  • urllib3==1.25.11

  • wheel==0.37.0

  • wrapt==1.14.1

  • yarl==1.8.2

  • zipp==3.10.0

壓縮程式庫以加入

除非程式庫包含在單一的 .py 檔案裡,否則應封裝於 .zip 封存中。套件目錄應位於封存的根目錄,且套件必須包含一個 __init__.py 檔案。接著 Python 就可以正常匯入套件。

如果程式庫僅由一個 .py 檔案裡的單一 Python 模組組成,則不必將其置於 .zip 檔案。

在 AWS Glue 工作室筆記本中加載 Python 庫

若要在 AWS Glue Studio 筆記本中指定 Python 程式庫,請參閱安裝其他 Python 模組

在開發端點載入 Python 程式庫

若要將不同的程式庫集用於不同的 ETL 指令碼,您可以為各程式庫集設定個別的開發端點,或是覆寫每次切換指令碼時開發端點載入的程式庫 .zip 檔案。

在建立開發端點時,您可以使用主控台為其指定一或多個程式庫 .zip 檔案。指派名稱和 IAM 角色後,請選擇 Script Libraries and job parameters (optional) [指令碼程式庫與任務參數 (選用)],並在 .zipPython library path (Python 程式庫路徑) 方塊中輸入程式庫 檔案的完整 Amazon S3 路徑。例如:

s3://bucket/prefix/site-packages.zip

您也可以為檔案指定多個完整路徑,以逗號但不含空格的方式隔開,例如:

s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip

如果您在後來更新這些 .zip 檔案,您可以使用主控台將檔案重新匯入開發端點。導覽至該開發端點,從 Action (動作) 選單選擇 Update ETL libraries (更新 ETL 程式庫)。

您可以透過類似方式使用 AWS Glue API 指定程式庫檔案。呼叫 CreateDevEndpoint 行動(Python:創建開發端點) 以建立開發端點時,您可以在 ExtraPythonLibsS3Path 參數中為程式庫指定一個或多個完整路徑,而呼叫的格式如下:

dep = glue.create_dev_endpoint( EndpointName="testDevEndpoint", RoleArn="arn:aws:iam::123456789012", SecurityGroupIds="sg-7f5ad1ff", SubnetId="subnet-c12fdba4", PublicKey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtp04H/y...", NumberOfNodes=3, ExtraPythonLibsS3Path="s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip")

更新開發端點時,您也可以更新其載入的程式庫,方式是使用 DevEndpointCustomLibraries 物件,並在呼叫 UpdateDevEndpoint (更新開發端點) 時將 UpdateEtlLibraries 參數設定為 True

在工作中使用 Python 程式庫或 JobRun

在主控台建立新任務時,您可以指定一個或多個程式庫 .zip 檔案,方式是選擇 Script Libraries and job parameters (optional) (指令碼程式庫與任務參數 (選用)),並以與建立開發端點相同的方式輸入完整 Amazon S3 路徑:

s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip

若要呼叫 CreateJob (建立工作 (_A),您可以使用 --extra-py-files 預設參數來為預設程式庫指定一個或多個完整路徑,如下所示:

job = glue.create_job(Name='sampleJob', Role='Glue_DefaultRole', Command={'Name': 'glueetl', 'ScriptLocation': 's3://my_script_bucket/scripts/my_etl_script.py'}, DefaultArguments={'--extra-py-files': 's3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip'})

然後,當您啟動時 JobRun,您可以使用不同的庫設置覆蓋默認庫設置:

runId = glue.start_job_run(JobName='sampleJob', Arguments={'--extra-py-files': 's3://bucket/prefix/lib_B.zip'})