java.lang.IllegalStateException:无法在数据流2.X中返回默认编码器

PUG*_*PUG 4 java google-cloud-dataflow apache-beam

我在dataflow 2.1 sdk中有一个简单的管道.从pubsub读取数据然后将DoFn应用于它.

PCollection<MyClass> e = streamData.apply("ToE", ParDo.of(new MyDoFNClass()));
Run Code Online (Sandbox Code Playgroud)

在此管道上获得以下错误:

java.lang.IllegalStateException:无法返回ToEvents/ParMultiDo(MyDoFNClass).out0 [PCollection]的默认编码器.更正以下根本原因之一:未手动指定编码器; 你可以使用.setCoder()来完成.从CoderRegistry推断编码器失败:无法为com.XXmodel.MyClass提供编码器.

MyDoFn类如下:

@DefaultCoder(AvroCoder.class)

public class MyClass{

    public long id;
    public HashMap<String,HashSet<String>> a;

    @SerializedName("a")
    public Integer Id;
    @SerializedName("ae")
    public String ae;
}
Run Code Online (Sandbox Code Playgroud)

PUG*_*PUG 13

找到了解决办法只是neeeded添加implements SerializableMyClass

@DefaultCoder(AvroCoder.class)

public class MyClass implements Serializable {

public long id;
public HashMap<String,HashSet<String>> a;

@SerializedName("a")
public Integer Id;
@SerializedName("ae")
public String ae;
}
Run Code Online (Sandbox Code Playgroud)