Python awsglue.utils.GlueArgumentError:参数--需要作业名称

Python awsglue.utils.GlueArgumentError:参数--需要作业名称,python,amazon-web-services,pyspark,aws-glue,Python,Amazon Web Services,Pyspark,Aws Glue,当我使用Python在AWS Glue中运行Glue作业样板时,我得到一个错误 import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job glueContext

当我使用Python在AWS Glue中运行Glue作业样板时,我得到一个错误

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

glueContext = GlueContext(SparkContext.getOrCreate())
spark = glueContext.spark_session

args = getResolvedOptions(sys.argv, ['JOB_NAME'])
job = Job(glue_context)
job.init(args[‘JOB_NAME’], args)
这是错误

in getResolvedOptions
File "/usr/lib64/python2.7/argparse.py", line 1733, in parse_known_args
namespace, args = self._parse_known_args(args, namespace)
File "/usr/lib64/python2.7/argparse.py", line 1957, in _parse_known_args
self.error(_('argument %s is required') % name)
awsglue.utils.GlueArgumentError: argument --JOB_NAME is required
这遵循我的代码,然后

job.commit()
但是美国焊接学会说,不要提供工作名称。 我做错了什么?
那么getResolved做什么呢?我试图阅读AWS文档,但什么也看不到。

您能提供示例脚本的参考链接吗。我相信AWS会解释说,您应该使用脚本或lambda等启动作业。在这种情况下,您将指定以下内容:

response = client.start_job_run(
             JobName = 'my_test_Job',
             Arguments = {
               '--day_partition_key':   'partition_0',
               '--hour_partition_key':  'partition_1',
               '--day_partition_value':  day_partition_value,
               '--hour_partition_value': hour_partition_value } )
args = getResolvedOptions(sys.argv,
                          ['JOB_NAME',
                           'day_partition_key',
                           'hour_partition_key',
                           'day_partition_value',
                           'hour_partition_value'])
然后在粘合作业中,您可以按如下方式访问这些变量:

response = client.start_job_run(
             JobName = 'my_test_Job',
             Arguments = {
               '--day_partition_key':   'partition_0',
               '--hour_partition_key':  'partition_1',
               '--day_partition_value':  day_partition_value,
               '--hour_partition_value': hour_partition_value } )
args = getResolvedOptions(sys.argv,
                          ['JOB_NAME',
                           'day_partition_key',
                           'hour_partition_key',
                           'day_partition_value',
                           'hour_partition_value'])
因此,在某个地方传递了job name的变量/值。明智的做法是,通过按名称job\u name设置参数并传递值来运行作业

以上代码示例的参考:


请告诉我们。

您不能在dev环境中运行以下命令

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

这可能是一个迟到的答复,但为我解决了同样的错误。 要将参数传递到粘合脚本,请执行以下操作: 在安全配置、脚本库和作业参数(可选)中添加/编辑作业时传递作业参数-->作业参数(键值),例如:

key = --JOB_NAME    value= my_job
key = --input       value= 'xyz'
要在粘合脚本中使用参数,请执行以下操作:

import sys
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]
sc = SparkContext()
glueContext = GlueContext(SparkContext.getOrCreate())
spark = glueContext.spark_session
job = Job(glueContext)
args = getResolvedOptions(sys.argv, ['JOB_NAME','input'])
job.init(args['JOB_NAME'], args)
print("Job name is:{}, and input: {}".format(args["JOB_NAME"],args["input"]))

job.commit()

另外,据我所知,它与开发环境无关,在仪表板中添加/编辑粘合作业时,也可以在不创建lambda函数的情况下传递参数。

我偶然发现了这个解决方案,同时遇到了与OP类似的问题,但与AWS粘合Python Shell作业有关。斯瓦蒂的上述回答起到了帮助作用

如果有人试图将参数传递给AWS Glue Python Shell作业,下面是一个适合我的模板:

key = --JOB_NAME    value= my_job
key = --input       value= 'xyz'
AWS Glue Python外壳作业脚本:

import sys
from awsglue.utils import getResolvedOptions

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

print("Job name is:{}, and input: {}".format(args["JOB_NAME"],args["input"]))

要将作业名称传递给脚本,请使用下面的命令提交脚本

$HOME/bin/aws-glue-libs-glue-1.0/bin/gluesparksubmit TestScripy.py--作业名称本地测试

local_test是作业名称。我仍然不知道如何传递除JOBNAME之外的键值对


这里有更多信息:

您是否使用齐柏林笔记本等开发端点来运行此代码?