如何在apachebeam中为复合变换提供参数?

2024-10-02 12:32:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是apachebeam的pythonsdk。在

我有一些转换步骤,希望使它们具有可重用性,这就要求我编写一个如下所示的自定义复合转换:

class MyCompositeTransform(beam.PTransform):
def expand(self, pcoll, arg1, kwarg1=u'default'):
    result = (pcoll
              | 'Step 1' >> beam.Map(lambda f: SomeFn(f, arg1))
              | 'Last step' >> beam.Map(lambda f: SomeOtherFn(f, kwarg1))
              )
    return result

我想要的是提供一些额外的参数arg1和{},它们是内部其他转换所需要的。但我不知道这是否是一个有效的方法,也不知道如何在管道中使用它。在

有人能给我指一下方向吗?在


Tags: lambdamapdef步骤resultclassbeamexpand
1条回答
网友
1楼 · 发布于 2024-10-02 12:32:48

一般来说,您不能像您所描述的那样在运行时向转换动态传递附加参数。当您运行构造管道的控制器程序时,管道的结构被序列化、发送,然后在无权访问您的控制器程序的工作组上并行执行,它们只获得ParDos的结构和实际代码。在

动态参数化执行的一种方法是提供额外的数据作为额外的输入,例如创建另一个用参数值填充的PCollection,然后将其与主PCollection连接。例如使用side-inputs,或^{}。在

如果您正在查看Cloud Dataflow,那么您可能会考虑使用管道templates with ^{},但不确定它们是否在pyton或非数据流运行器中可用。在

相关问题 更多 >

    热门问题