通过 add_job_flow_steps 将嵌套字典传递给 EMR
Posted
技术标签:
【中文标题】通过 add_job_flow_steps 将嵌套字典传递给 EMR【英文标题】:Passing Nested Dictionary to EMR via add_job_flow_steps 【发布时间】:2021-10-22 03:59:39 【问题描述】:我创建了一个名为 my_dict 的 Python 字典,其中包含一些元数据。我通过json.dumps()
将 my_dict 转换为字符串。 my_dict 然后通过add_job_flow_steps
作为 HadoopJarStep 中的参数传递给 EMR。
提交步骤后,用户界面中 EMR 步骤的参数部分中的参数如下所示:
--my_dict "\"level_one_key\": \"level_two_key\": \"level_two_value\""
现在,我还将一个名为execute.py
的python 文件传递给EMR 以运行。上述参数被传递到execute.py
的主函数中,在那里它立即转换为带有json.loads()
的字典。它看起来像:
parser.add_argument('--my_dict', type=json.loads, required=False)
问题:当我传递一个嵌套字典时,该步骤在 20 秒内失败,原因是 UNKOWN ERROR,并且没有写入任何日志。 :(
但是,当我将它作为平面字典传递时,例如:
--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。
【问题讨论】:
你能在解析后打印出你的字典并确保它被正确解析吗? @KyleParsons - 我添加了打印输出。 【参考方案1】:我能够通过在未嵌套的字典末尾添加另一个键值对来解决此问题。像这样:
--my_arg "\"level_one_key\": \"level_two_key\": \"level_two_value\", \"level_one_second_key\": \"level_one_second_value\""
【讨论】:
以上是关于通过 add_job_flow_steps 将嵌套字典传递给 EMR的主要内容,如果未能解决你的问题,请参考以下文章
C# + EntityFramework:通过查询将多个组转换为嵌套 JSON