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,也许你错过了什么地方。