很明显,当仅在静态块中写入时,可以在ParDo内部使用Pipeline和DataflowPipelineOptions实例。因为,processElement()不是静态的。因此,ParDo无法容纳此函数中的任何逻辑,该函数处理Pipeline和DataflowPipelineOptions的对象。
示例:
public void processElement(ProcessContext c)
{
PCollection<String> dummy=p.apply("dummy"); // It will fail with a SerializableException (What I want to do)
}
所以,只想通过从ParDo本身调用静态函数来检查是否可以实现相同的功能。
public void processElement(ProcessContext c)
{
logicCaller(); // It's a static function
}
logicCaller()静态方法可以包含从创建简单PCollection到任何ParDo块执行的任何内容,其中包含一些逻辑步骤。
我试过这种方式并且函数也成功调用了。奇怪的行为是,所有内容都在静态函数中执行,但ParDo部分被跳过而没有任何错误或异常。
任何见解?