如何在复合实体中使用从其他实体生成的字典?

How to use dictionary yielded from other solid in a composite Solid?

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

与使用@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

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