Java Apache Beam 测试管道用空值替换测试数据
Java Apache Beam Testing pipeline replaces test data with null values
我创建了一个这样的测试管道:
Pipeline pipeline;
PipelineOptions pipelineOptions = TestPipeline.testingPipelineOptions();
pipeline = Pipeline.create(pipelineOptions);
FlattenLight flattenLight = new FlattenLight();
DataflowMessage dataflowMessage = getTestDataflowMessage();
PCollection<TableRow> flatttened = pipeline
.apply("Create Input", Create.of(dataflowMessage))
.apply(ParDo.of(flattenLight));
我想测试 FlattenLight class,它是一个具有 processElement(ProcessContext c)
方法的 DoFn 子项。
问题是用getTestDataflowMessage()
生成的测试数据没有通过管道。 FlattenLight 对象接收一个具有空值的对象作为字段。
getTestDataflowMessage() 按预期创建字段。您可以看到存在很多不同的测试值:
debugger step at test data creation
但是 FlattenLight class 收到一个大部分为空的对象:
debugger step entering the FlattenLight object
如您所见,数据创建和 FlattenLight 处理之间没有步骤。为什么会这样?如何解决?
我遇到了同样的问题。解决方案是将 implements Serializable
添加到模型层次结构中的所有模型。仔细看看你的 DataflowMessage,也许你错过了什么地方。
我创建了一个这样的测试管道:
Pipeline pipeline;
PipelineOptions pipelineOptions = TestPipeline.testingPipelineOptions();
pipeline = Pipeline.create(pipelineOptions);
FlattenLight flattenLight = new FlattenLight();
DataflowMessage dataflowMessage = getTestDataflowMessage();
PCollection<TableRow> flatttened = pipeline
.apply("Create Input", Create.of(dataflowMessage))
.apply(ParDo.of(flattenLight));
我想测试 FlattenLight class,它是一个具有 processElement(ProcessContext c)
方法的 DoFn 子项。
问题是用getTestDataflowMessage()
生成的测试数据没有通过管道。 FlattenLight 对象接收一个具有空值的对象作为字段。
getTestDataflowMessage() 按预期创建字段。您可以看到存在很多不同的测试值:
debugger step at test data creation
但是 FlattenLight class 收到一个大部分为空的对象:
debugger step entering the FlattenLight object
如您所见,数据创建和 FlattenLight 处理之间没有步骤。为什么会这样?如何解决?
我遇到了同样的问题。解决方案是将 implements Serializable
添加到模型层次结构中的所有模型。仔细看看你的 DataflowMessage,也许你错过了什么地方。