【问题标题】:How to use dictionary yielded from other solid in a composite Solid?如何在复合实体中使用从其他实体产生的字典?
【发布时间】:2021-03-09 08:14:24
【问题描述】:

例如,我有一个名为 initiate_load 的实体,它产生一个 dictionary 和一个 integer ,类似于:

@solid(
    output_defs=[
        OutputDefinition(name='l_dict', is_required=False),
        OutputDefinition(name='l_int', is_required=False)
    ],
)
def initiate_load(context):
    .... 
    ....

    yield Output(l_dict, output_name='l_dict')
    yield Output(l_int, output_name='l_int')

我也有一个composite_solid,比如说call_other_solid_composite

我将l_dictl_int 传递给composite_solid 我正在使用l_dict 来获取映射到其键的值。类似的东西。

@composite_solid
def call_other_solid_composite(p_dict,p_int):
    l_val1 = p_dict['val1']
    ...
    ...

然后我得到一个错误:TypeError: 'InputMappingNode' object is not subscriptable。 我到处搜索,但找不到解决方案。该文档也没有帮助。我有需要解析这些值的用例。 任何帮助将不胜感激。

【问题讨论】:

    标签: python dagster


    【解决方案1】:

    与使用@pipeline 修饰的方法类似,您不应将使用@composite_solid 修饰的方法视为常规python 方法。 Dagster 将包装它们并使其完全不同。这就是为什么 p_dict 参数不能在方法内部用作常规方法参数的原因。

    要实现您想要的,您有几个选择:

    • 直接在另一个实体中传递p_dict 参数,在这个实体中您将能够执行l_val1 = p_dict['val1']
    • 在您现在在initiate_load 方法中获得的收益旁边,您也可以将p_dict['val1'] 作为输出。这使您可以同时使用 dict 和 'val1' 值作为其他实体(也在您的复合材料中)的输入
    • 您可以在复合实体中拥有一个生成 p_dict['val1'] 的实体,这样您就可以将此值用作复合材料中其他实体的输入。

    希望这会有所帮助。作为参考,可以找到关于复合实体的文档here

    对您提供的 sn-ps 的一个小评论。 Dagster 有一个非常简洁的打字系统,最好尽可能多地使用它。

    【讨论】:

    • 我知道方法和实体的区别。但不幸的是,我的用例不允许我引入更多实体或产生输出。不得不切换到普通实体和实体内部,我们现在调用 ThreadPooling 来并行执行事情。 sn-p 只是为了让事情尽可能简单,以免混淆其他人。我确实使用打字。但是,我真的觉得 Dagster 的文档需要改进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2015-06-30
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    相关资源
    最近更新 更多