单元测试接受侧输入的 dataflow/apache Beam 流水线
Unit testing a dataflow/apache beam pipline that takes a side input
使用 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<T> sideInput, BoundedWindow window, T value)
函数 here。但在这种情况下,我如何获得 BoundedWindow
任何想法我在这里错过了什么,谢谢。
您可以尝试使用 GlobalWindow.INSTANCE,但通常 DoFnTester 将被弃用,推荐的方法是始终使用 TestPipeline 和 PAssert。
使用 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<T> sideInput, BoundedWindow window, T value)
函数 here。但在这种情况下,我如何获得 BoundedWindow
任何想法我在这里错过了什么,谢谢。
您可以尝试使用 GlobalWindow.INSTANCE,但通常 DoFnTester 将被弃用,推荐的方法是始终使用 TestPipeline 和 PAssert。