通过add_job_flow_steps将嵌套字典传递给EMR



我用一些元数据创建了一个名为my_dict的python字典。我通过json.dumps()将my_dict转换为字符串。my_dict然后通过add_job_flow_steps作为HadoopJarStep中的参数传递给EMR。

一旦提交了步骤,UI中EMR步骤的Arguments部分中的参数如下所示:

--my_dict "{"level_one_key": {"level_two_key": "level_two_value"}}"

现在,我还向EMR传递一个名为execute.py的python文件以运行。上述参数被传递到execute.py的main函数中,在那里它立即被json.loads()转换成一个字典。它看起来像:

parser.add_argument('--my_dict', type=json.loads, required=False)

问题:当我传递一个嵌套字典时,步骤在20秒后失败,原因是未知错误,并且没有写入任何日志。(

但是当我把它作为一个平面字典传递时,比如:

--my_dict "{"level_one_key": "level_one_value"}"

它工作得很好。

我不想发布太多我的代码,因为这是工作相关的。但我错过了什么吗?我觉得我应该能够传递一个嵌套字典,没有问题。我也试过转换字典后,它被传递给main,像这样:
parser.add_argument('--my_dict', type=str, required=False)
my_dict = json.loads(args.my_dict)

然而它仍然失败了。什么好主意吗?

更新:当嵌套字典在execute.py中作为STR解析后(与使用json.loads相反)打印出来时,它看起来像:

{"level_one_key": {"level_two_key": "level_two_value"

缺少字典的最后两个括号…不管出于什么原因。显然,这会导致错误,但我不知道为什么不将整个字典传递给main。

我可以通过在字典末尾添加另一个未嵌套的键值对来解决这个问题。这样的:

--my_arg "{"level_one_key": {"level_two_key": "level_two_value"}, "level_one_second_key": "level_one_second_value"}"

相关内容

  • 没有找到相关文章

最新更新