在本地环境中调用 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)
这是拍钱...
我有一个本地 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)
这是拍钱...