在 Apache Beam/Dataflow 中,在转换之间传递属性可以使用 ParDo
转换中的 withSideInputs
方法。下面是一个示例代码:
import apache_beam as beam
class AddAttributeFn(beam.DoFn):
def __init__(self, attribute_value):
self.attribute_value = attribute_value
def process(self, element, *args, **kwargs):
# 在输出元素中添加属性
yield beam.pvalue.TaggedOutput('output', (element, self.attribute_value))
def main():
with beam.Pipeline() as pipeline:
input_data = pipeline | beam.Create([1, 2, 3, 4, 5])
# 创建一个具有属性的 PCollection
attribute_value = 10
attribute_pcoll = pipeline | beam.Create([attribute_value])
# 使用 withSideInputs 方法传递属性
output_data = input_data | beam.ParDo(AddAttributeFn(), attribute_pcoll)
# 获取输出 PCollection
output_pcoll = output_data['output']
# 打印输出元素和属性
output_pcoll | beam.Map(print)
if __name__ == '__main__':
main()
在上面的示例中,AddAttributeFn
类是一个 ParDo
转换,用于在每个输入元素上添加属性值。attribute_pcoll
是一个包含属性值的 PCollection。withSideInputs
方法将 attribute_pcoll
作为附加输入传递给 AddAttributeFn
转换。在 AddAttributeFn
的 process
方法中,我们可以访问属性值并将其添加到输出元素中。
这样,我们就可以在 Apache Beam/Dataflow 中在转换之间传递属性。