java.lang.IllegalStateException : Unable to return a default Coder in dataflow 2. X

标签 java google-cloud-dataflow apache-beam

我在数据流 2.1 SDK 中有一个简单的管道。它从 pubsub 读取数据,然后对其应用 DoFn。

PCollection<MyClass> e = streamData.apply("ToE", ParDo.of(new MyDoFNClass()));

在此管道上出现以下错误:

java.lang.IllegalStateException: Unable to return a default Coder for ToEvents/ParMultiDo(MyDoFNClass).out0 [PCollection]. Correct one of the following root causes: No Coder has been manually specified; you may do so using .setCoder(). Inferring a Coder from the CoderRegistry failed: Unable to provide a Coder for com.X.X.model.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;
}

最佳答案

找到解决方案只需要将 implements Serializable 添加到 MyClass

@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;
}

关于java.lang.IllegalStateException : Unable to return a default Coder in dataflow 2. X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47706013/

相关文章:

java - 无法实现图像裁剪

java - Java上的PreparedStatement以及设置参数的概率

java - 使用 Java 的数独 GUI

java - Beam/Dataflow 2.2.0 - 从 pcollection 中提取前 n 个元素

c# - 在 Java 中替代 C# Dictionary<char, char[]>

python - 在美国位置未找到数据集

google-cloud-dataflow - 我可以修改 apache 光束变换中的元素吗?

java - Apache 光束 : Cannot find DataflowRunner

google-cloud-dataflow - 数据流触发器 AfterProcessingTime.pastFirstElementInPane() 如何工作?

google-cloud-dataflow - 如何使用 Apache Beam Python SDK 使用 ParDo 过滤 PCollection 的元素