本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Python 库与 AWS Glue 一起使用
只要是用纯 Python 编写的,就可以将 Python 扩展模块和库与您的 AWS Glue ETL 脚本一起使用。C 库 (如 pandas
) 目前不受支持,用其他语言编写的扩展也不受支持。
压缩库以用于包含
除非库包含在单个 .py
文件中,否则它应打包到 .zip
存档中。包目录应该位于存档文件的根部,并且必须包含一个针对该包的 __init__.py
文件。然后,Python 将能够以正常方式导入包。
如果您的库仅在一个 .py
文件中包含单个 Python 模块,您无需将其放入 .zip
文件。
在开发终端节点中加载 Python 库
如果对不同的 ETL 脚本使用不同的库集,则可以为每个集设置单独的开发终端节点,也可以覆盖每次您切换脚本时开发终端节点加载的库 .zip
文件。
在创建开发终端节点时,您可以使用控制台为其指定一个或多个库 .zip 文件。在分配名称和 IAM 角色后,请选择 Script Libraries and job parameters (optional),然后在 Amazon S3Python library path.zip
框中输入库 文件的完整 路径。例如:
s3://bucket
/prefix/
site-packages.zip
如果需要,您可以指定文件的多个完整路径并使用逗号分隔,但不能有空格,如下所示:
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
如果您更新这些 .zip
文件,则可以使用控制台将其重新导入到您的开发终端节点。导航到所涉开发人员终端节点,选中它旁边的框,然后从 Action 菜单中选择 Update ETL libraries。
以类似方式,您可以使用 AWS Glue APIs 指定库文件。 当您通过调用 CreateDevEndpoint 操作 (Python:create_dev_endpoint) 创建开发终端节点时,您可以在 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
")
当您更新一个开发终端节点时,还可以通过在调用 UpdateDevEndpoint (update_dev_endpoint) 时使用 DevEndpointCustomLibraries 对象并将 UpdateEtlLibraries
参数设置为 True
来更新它所加载的库。
如果您将 Zeppelin Notebook 与开发终端节点结合使用,则在从您的 PySpark 文件中导入一个或多个包之前,您需要调用以下 .zip
函数:
sc.addPyFile("/home/glue/downloads/python/yourZipFileName
.zip")
在作业或JobRun中使用 Python 库
当您在控制台上创建新作业时,可以通过选择 Script Libraries and job parameters (optional) (脚本库和作业参数 (可选)) 并输入完整的 Amazon S3 库路径来指定一个或多个库 .zip 文件(方法与创建开发终端节点时相同):
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
如果您正在调用 CreateJob (create_job),则可以使用 --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
'})
使用 AWS Glue 版本 2.0 指定其他 Python 模块
AWS Glue 版本 2.0 还允许您在作业级别提供其他 Python 模块或不同版本。您可以将 --additional-python-modules
选项与逗号分隔的 Python 模块列表结合使用来添加新模块或更改现有模块的版本。
有关更多信息,请参阅运行 Spark ETL 作业并缩短启动时间。