Python awsglue.utils.GlueArgumentError:参数--需要作业名称
当我使用Python在AWS Glue中运行Glue作业样板时,我得到一个错误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
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之外的键值对
这里有更多信息:您是否使用齐柏林笔记本等开发端点来运行此代码?