如何使用当前版本的 boto3 运行 AWS Glue Python Spark 作业?

gbe*_*ven 4 python configuration amazon-web-services boto3 aws-glue

我尝试在 AWS Glue Spark 作业中运行最新版本的 boto3,以访问 Glue 默认版本中不可用的方法。

为了获取 boto3 的默认版本并验证我想要访问的方法不可用,我运行了这段代码,除了我的print语句之外,它都是样板代码:

import sys
import boto3
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

athena = boto3.client('athena')
print(boto3.__version__) # verify the default version boto3 imports
print(athena.list_table_metadata) # method I want to verify I can access in Glue

job.commit()
Run Code Online (Sandbox Code Playgroud)

返回

1.12.4

回溯(最近一次调用最后一次):文件“/tmp/another_sample”,第 20 行,在 print(athena.list_table_metadata) 文件“/home/spark/.local/lib/python3.7/site-packages/botocore/client. py”,第 566 行,getattr self. 班级名称,项目)AttributeError:“Athena”对象没有属性“list_table_metadata”

好的,正如旧版本 boto3 所预期的那样。让我们尝试导入最新版本...

我执行以下步骤:

  1. 转到https://pypi.org/project/boto3/#files
  2. 下载boto3-1.17.13-py2.py3-none-any.whl文件
  3. 将其放置在S3位置
  4. 返回 Glue 作业,在安全配置、脚本库和作业参数(可选)部分下,我使用步骤 3 中的 S3 位置更新Python 库路径
  5. 重新运行上面的代码块

返回

1.17.9

回溯(最近一次调用最后一次):文件“/tmp/another_sample”,第 20 行,在 print(athena.list_table_metadata) 文件“/home/spark/.local/lib/python3.7/site-packages/botocore/client. py”,第 566 行,getattr self. 班级名称,项目)AttributeError:“Athena”对象没有属性“list_table_metadata”

如果我在本地运行相同的脚本(运行 1.17.9),我可以找到该方法:

1.17.9

<位于 0x7efd8a4f4710 的 <botocore.client.Athena 对象的绑定方法 ClientCreator._create_api_method.._api_call>>

关于这里发生的事情以及如何访问我期望应该在升级版本中导入的方法有什么想法吗?

gbe*_*ven 10

最终在AWS 文档中找到了解决方案。

在作业的安全配置、脚本库和作业参数(可选)部分下的胶水作业参数中添加了以下键/值对:

钥匙

--附加Python模块

价值

botocore>=1.20.12,boto3>=1.17.12

在此输入图像描述