如何(单元)在python的Apache-Beam中测试流管道?

时间:2019-06-18 10:53:45

标签: google-cloud-dataflow apache-beam

我写了一些流传输管道(从Pub / Sub开始),我想向它添加一些窗口机制。我现在想以某种适当的方式对其进行测试,那么如何创建一些“虚拟”流?

我的代码:

pipeline_options = PipelineOptions()
pipeline_options.view_as(SetupOptions).save_main_session = True
pipeline_options.view_as(StandardOptions).streaming = True
p = TestPipeline(options=pipeline_options, runner=DirectRunner())
xmls_beam = beam.Create(xmls)
x = p | xmls_beam | beam.FlatMap(process_xmls) | beam.ParDo(FilterTI()) | beam.WindowInto(window.FixedWindows(200)) | beam.GroupByKey()
result = p.run()
result.wait_until_finish()

1 个答案:

答案 0 :(得分:1)

您可以使用TimestampedValue的PCollection模拟“虚拟流”。

例如,如果您输入的是:

    l = [window.TimestampedValue('a', 100), window.TimestampedValue('b', 300)]
    pc = p | beam.Create(l) | ...

对于您的情况(宽度为200的固定窗口),可以期望输出元素'a'落入第一个窗口,'b'落入第二个窗口。