【问题标题】:Unit testing a dataflow/apache beam pipline that takes a side input单元测试采用侧面输入的数据流/apache 光束管道
【发布时间】:2017-12-17 06:53:40
【问题描述】:

使用 Dataflow 2.1 sdk

        <dependency>
            <groupId>com.google.cloud.dataflow</groupId>
            <artifactId>google-cloud-dataflow-java-sdk-all</artifactId>
            <version>[2.1.0, 2.99)</version>
        </dependency>

根据this 文档setSideInputInGlobalWindow 应该可用。但我只看到以下两个相关功能:

下面是我的完整代码:

DoFnTester<EventItem,EventItem> fnTester = DoFnTester.of(myDoFn);
    TestPipeline pipeline = TestPipeline.create();

TableRow row= new TableRow();
        atr.set("a", 7);
        atr.set("q", new ArrayList<String>() {{ add("video_referrer"); add("from_homepage");}});

PCollectionView<TableRow> sideInput =  (PCollectionView<TableRow>) pipeline.apply(Create.of(Arrays.asList(atr)));
        Iterable<TableRow> sidVal = Arrays.asList(atr);
        fnTester.setSideInput(sideInput, sidVal); //error on this line

        List<Foo> testOutputs = fnTester.processBundle(Arrays.asList(testInput));

我看到setSideInput(PCollectionView&lt;T&gt; sideInput, BoundedWindow window, T value) 函数here。但在这种情况下,我如何获得BoundedWindow 任何想法我在这里缺少什么,谢谢。

【问题讨论】:

    标签: apache-beam dataflow


    【解决方案1】:

    您可以尝试使用 GlobalWindow.INSTANCE 但通常 DoFnTester 将被弃用,推荐的方法是始终使用 TestPipeline 和 PAssert。

    【讨论】:

    • jkff,感谢您的回复。如果有关于此的更新记录的任何想法(使用 TestPipeline 测试单个 DoFn)
    • 我认为 PAssert 和 TestPipeline 有 javadocs;此外,SDK 本身中的几乎所有转换都使用 TestPipeline 进行了测试,因此您应该能够使用 Beam 自己的单元测试作为示例。如果在那之后还有什么特别不清楚的地方,请告诉我。
    • 谢谢,在这里添加了一个示例meethassan.net/2017/12/17/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多