在Beam中是否有一个PCollection可以“保存”同一超类的不同对象,从而

PCollection<T extends SuperClass> result =  input.apply(ParDo.of(new DoFnThatReturnsSubClasses()));


代替

PCollection<SubClassA> A = input.apply(ParDo.of(new DoFnSubClassesA()));
PCollection<SubClassB> B = input.apply(ParDo.of(new DoFnSubClassesB()));


我的超类拥有一些基本领域,如下所示

public class SuperClass {

String key;
Long timestamp;


}

但是我的子类将包含一个附加字段,该字段具有不同数据类型的相同变量名。即

public class SubClassA extends SuperClass {
    List<HashMap<String, String>> value = new ArrayList<>();
}


另一个子类

public class SubClassB extends SuperClass {
    String value;
}


我真正想要实现的是允许字段value具有不同的数据类型。我唯一能想到的就是将其划分为不同的子类。我意识到这可能更多是Java编程问题和对语言的理解不足。

最佳答案

是的,这是可能的。您可以具有包含SubclassX对象混合的PCollection。您需要确保用于PCollection的Coder可以对所有可能的子类进行编码和解码。

您的下游DoFns将接收超类对象,并且您需要向下转换到适当的子类。

10-04 12:22