Google cloud platform 数据流DoFn将不会使用PipelineOptions序列化

Google cloud platform 数据流DoFn将不会使用PipelineOptions序列化,google-cloud-platform,google-cloud-dataflow,Google Cloud Platform,Google Cloud Dataflow,我试图将一个PipelineOptions接口传递给dataflow DoFn,以便DoFn可以配置一些需要重新实例化的不可序列化的东西,但是当我告诉数据流保存我的PipelineOptions子类的实例时,它似乎无法序列化DoFn。我是否需要对Options接口执行某些操作,以使其正确序列化 我知道这是一个编写自定义序列化+反序列化代码的选项(如,),但PipelineOptions类似乎明确表示它应该是可序列化的,我更希望不要在我使用此options对象的每个DoFn中编写序列化和反序列化代

我试图将一个PipelineOptions接口传递给dataflow DoFn,以便DoFn可以配置一些需要重新实例化的不可序列化的东西,但是当我告诉数据流保存我的PipelineOptions子类的实例时,它似乎无法序列化DoFn。我是否需要对Options接口执行某些操作,以使其正确序列化

我知道这是一个编写自定义序列化+反序列化代码的选项(如,),但PipelineOptions类似乎明确表示它应该是可序列化的,我更希望不要在我使用此options对象的每个DoFn中编写序列化和反序列化代码

选项类代码段:

public interface Options 
extends BigtableOptions, BigtableScanOptions, OfflineModuleOptions, Serializable {...}
DoFn定义

public class RunEventGeneratorsDoFn extends DoFn<...,...> {
    private OfflinePipelineRunner.Options options;
....
}

实际管道选项对象不应作为字段包含在特定的
DoFn
pttransform
中。相反,请传入要访问的特定选项的值

请参阅此问题以了解更多上下文“”

Exception in thread "main" java.lang.IllegalArgumentException: unable to serialize [my DoFn]
    at com.google.cloud.dataflow.sdk.util.SerializableUtils.serializeToByteArray(SerializableUtils.java:54)
    at com.google.cloud.dataflow.sdk.util.SerializableUtils.clone(SerializableUtils.java:91)
    at com.google.cloud.dataflow.sdk.transforms.ParDo$Bound.<init>(ParDo.java:720)
    at com.google.cloud.dataflow.sdk.transforms.ParDo$Unbound.of(ParDo.java:678)
    at com.google.cloud.dataflow.sdk.transforms.ParDo$Unbound.access$000(ParDo.java:596)
    at com.google.cloud.dataflow.sdk.transforms.ParDo.of(ParDo.java:563)
    at com.google.cloud.dataflow.sdk.transforms.ParDo.of(ParDo.java:558)
    at [dofn instantiation line]
Caused by: java.io.NotSerializableException: com.google.cloud.dataflow.sdk.options.ProxyInvocationHandler
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
    at com.google.cloud.dataflow.sdk.util.SerializableUtils.serializeToByteArray(SerializableUtils.java:50)
    ... 7 more