在本地环境中调用 getResolvedOptions() 会产生 KeyError

Calling getResolvedOptions() in Local Environment Generates KeyError

我有一个本地 AWS Glue 环境,其中安装了 AWS Glue 库、Spark、PySpark 和所有东西。

我运行正在编写以下代码(在 REPL 中直接复制过去):

from awsglue.utils import getResolvedOptions

args = []
args.insert(-1, {"--JOB_NAME": "JOB_NAME"})
args.insert(-1, {"--input_file_path": "s3://things/that.csv"})
args.insert(-1, {"--output_bucket": "s3://things"})

getResolvedOptions(args, [
    '--JOB_NAME',
    '--input_file_path',
    '--output_bucket']
)

我收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
  File "C:\Users\UBI9\bin\aws-glue-libs\PyGlue.zip\awsglue\utils.py", line 115, in getResolvedOptions
  File "C:\Progra~1\Python37\lib\argparse.py", line 1781, in parse_known_args
    namespace, args = self._parse_known_args(args, namespace)
  File "C:\Progra~1\Python37\lib\argparse.py", line 1822, in _parse_known_args
    option_tuple = self._parse_optional(arg_string)
  File "C:\Progra~1\Python37\lib\argparse.py", line 2108, in _parse_optional
    if not arg_string[0] in self.prefix_chars:
KeyError: 0

args的取值如下:

[{'--input_file_path': 's3://things/that.csv'}, {'--output_bucket': 's3://things'}, {'--JOB_NAME': 'JOB_NAME'}]

当我拉起 the docs 时,看起来 args 是一个参数列表。我假设它是一个键值对列表。那是错的吗?我不能在本地运行这个功能吗?

AWS documentation 开始,--JOB_NAME 是 AWS Glue 内部的,您不应该设置它。

如果您正在 运行 进行本地 Glue 设置并希望在本地 运行 作业,您可以在将作业提交给 [=15] 时传递 --JOB_NAME 参数=].例如

./bin/gluesparksubmit path/to/job.py --JOB_NAME=my-job --input_file_path='s3://path'

并访问参数

args = getResolvedOptions(sys.argv, ['JOB_NAME', 'input_file_path'])
print(args['JOB_NAME'])
print(args['input_file_path'])

我的代码的问题在于我如何表达 JOB_NAME 赋值。我一直在列表中添加 key/value 对。该代码需要一个“--KEY=VALUE”字符串:

argv = ['whatevs', '--JOB_NAME=ThisIsMySickJobName']

运行 以下工作正常...

from pprint import pprint as pp
from awsglue.utils import getResolvedOptions
argv = ['whatevs', '--JOB_NAME=ThisIsMySickJobName']
args = getResolvedOptions(argv, ['JOB_NAME'])
pp(args)

这是拍钱...