4

例如,我有一个名为initial_load的实体,它产生一个字典和一个整数,例如:

@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_dict和传递l_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。我到处搜索,但找不到解决方案。该文档也没有帮助。我有需要解析这些值的用例。任何帮助将不胜感激。

4

1 回答 1

2

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

为了实现你想要的,你有几个选择:

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

希望这可以帮助。作为参考,可以在此处找到有关复合固体的文档。

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

于 2020-12-06T17:01:57.793 回答