java - 是否可以将不同的子类传递给同一个 PCollection?

标签 java google-cloud-dataflow apache-beam dataflow

Beam 中是否有可能有一个 PCollection 来“保存”同一父类(super class)的不同对象,使得

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()));

我的父类(super class)拥有一些基本字段,如下所示

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 的编码器可以对所有可能的子类进行编码和解码。

您的 DoFns 下游将接收父类(super class)对象,并且您需要向下转换为适当的子类。

关于java - 是否可以将不同的子类传递给同一个 PCollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49410588/

相关文章:

python - 从数据流运行 tensorflow 模型训练

python - 在 Google Cloud Dataflow 上安装 pandas 0.20.3 需要很长时间

python - 在 apache beam DirectRunner 中使用 KafkaIO 时出错

java - 使用 BouncycaSTLe 与 PSK 的 TLS 连接

java - 客户端应用程序与 MySQL 的连接

java - MicroBatchExecution : Query terminated with error UnsatisfiedLinkError: org. apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z

python - BigQuery SQL 作业对 Dataflow 管道的依赖性

python - 由于需求文件而无法部署数据流模板

google-bigquery - 在 Apache Beam 中维护全局状态

java - 为什么在方法上打开调用层次结构不起作用