将 Python 库与 一起使用AWS Glue - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

将 Python 库与 一起使用AWS Glue

只要是用纯 Python 编写的,就可以将 Python 扩展模块和库与您的 AWS Glue ETL 脚本一起使用。C 库 (如 pandas) 目前不受支持,用其他语言编写的扩展也不受支持。

压缩库以用于包含

除非库存机包含在一个单独的 .py 文件,应包装在 .zip 存档。包目录应该位于存档文件的根部,并且必须包含一个针对该包的 __init__.py 文件。然后,Python 将能够以正常方式导入包。

如果库存机仅包含一个单独的Python模块 .py 文件,您不需要将其放入 .zip 文件。

在开发终端节点中加载 Python 库

如果对不同的 ETL 脚本使用不同的库集,则可以为每个集设置单独的开发终端节点,也可以覆盖每次您切换脚本时开发终端节点加载的库 .zip 文件。

在创建开发终端节点时,您可以使用控制台为其指定一个或多个库 .zip 文件。分配名称和IAM角色后,选择 脚本库和作业参数(可选) 并输入全部 Amazon S3 图书馆路径 .zip 文件中的 Python库路径 盒。例如:。

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

如果需要,您可以指定文件的多个完整路径并使用逗号分隔,但不能有空格,如下所示:

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

如果您更新这些 .zip 文件,则可以使用控制台将其重新导入到您的开发终端节点。导航至问题的开发人员端点,勾选其旁边的方框,然后选择 更新ETL库操作 菜单。

类似地,您可以使用 AWS Glue API 指定库文件。当您通过调用创建发展端点时 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")

更新发展端点时,您还可以更新其加载的库 DevEndpointCustomLibraries 对象和设置 UpdateEtlLibraries 参数到 True 呼叫时 UpdateDevEndpoint (update_dev_endpoint).

如果您将 Zeppelin Notebook 与开发终端节点一起使用,则在从 .zip 文件中导入一个或多个包之前,需要调用以下 PySpark 函数:

sc.addPyFile("/home/glue/downloads/python/yourZipFileName.zip")

在作业或作业运行中使用 Python 库

在控制台上创建新的作业时,可以通过选择一个或多个库.zip文件来指定一个或多个库。 脚本库和作业参数(可选) 并进入 Amazon S3 创建发展端点时与您相同的库路径:

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'})

然后,当您启动作业运行时,可以使用其他设置覆盖默认库设置:

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

使用GLUE版本2.0指定其他Python模块

GLUE版本2.0还允许您在工作级别提供额外Python模块或不同版本。您可以使用 --additional-python-modules 选项包含逗号分隔的Python模块列表添加新模块或更改现有模块的版本。

有关更多信息,请参阅 运行火花ETL作业,启动时间缩短.