本地环境调用getResolvedOptions()触发KeyError错误
问题分析与解决:AWS Glue getResolvedOptions 本地运行报错
你的理解确实有误
你猜的没错——getResolvedOptions的args参数不是键值对字典的列表,它要求的是模拟命令行输入的字符串列表。就像你在终端里启动Glue Job时输入的参数格式:--参数名 参数值,对应的列表就是把每个--参数名和参数值拆成独立的字符串元素。
你之前传的是字典列表,函数内部会把每个字典当成单个参数字符串去解析,自然会触发索引错误(因为字典不是字符串,没法取arg_string[0])。
修正后的代码示例
把args改成正确的格式,同时注意第二个参数里的参数名不需要带--前缀,函数内部会自动处理匹配:
from awsglue.utils import getResolvedOptions # 正确的args格式:命令行风格的字符串列表 args = [ '--JOB_NAME', 'JOB_NAME', '--input_file_path', 's3://things/that.csv', '--output_bucket', 's3://things' ] # 解析参数,第二个参数是不带--的参数名列表 resolved_args = getResolvedOptions(args, ['JOB_NAME', 'input_file_path', 'output_bucket']) # 打印结果,会返回一个字典,键是参数名,值是对应的值 print(resolved_args) # 输出示例:{'JOB_NAME': 'JOB_NAME', 'input_file_path': 's3://things/that.csv', 'output_bucket': 's3://things'}
该函数能否在本地运行?
完全可以!只要你已经搭建好了包含AWS Glue库、Spark/PySpark的本地环境,修正参数格式后就能正常执行getResolvedOptions。
不过有个小提醒:如果你的后续代码需要访问S3等AWS资源,要确保本地配置了有效的AWS凭证(比如通过~/.aws/credentials文件,或者设置AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY环境变量),否则会遇到权限问题。而getResolvedOptions本身就是个纯参数解析工具,不需要依赖Glue集群,本地运行毫无压力。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

