gpt4 book ai didi

google-cloud-dataflow - 具有通用功能的 Google Cloud Dataflow 自定义键

转载 作者:行者123 更新时间:2023-12-02 01:31:28 26 4
gpt4 key购买 nike

我们正在使用 Dataflow Java SDK,并且我们有越来越多的几乎相同的自定义键类。

我想让它们扩展一个通用的抽象类,但是 Dataflow SDK 似乎试图实例化导致 InstantiationException 的抽象类。

Caused by: java.lang.RuntimeException: java.lang.InstantiationException
at org.apache.avro.specific.SpecificData.newInstance(SpecificData.java:316)
at org.apache.avro.specific.SpecificData.newRecord(SpecificData.java:332)
at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:173)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142)
at com.google.cloud.dataflow.sdk.coders.AvroCoder.decode(AvroCoder.java:242)
at com.google.cloud.dataflow.sdk.coders.KvCoder.decode(KvCoder.java:97)
at com.google.cloud.dataflow.sdk.coders.KvCoder.decode(KvCoder.java:42)
at com.google.cloud.dataflow.sdk.util.CoderUtils.decodeFromSafeStream(CoderUtils.java:156)
at com.google.cloud.dataflow.sdk.util.CoderUtils.decodeFromByteArray(CoderUtils.java:139)
at com.google.cloud.dataflow.sdk.util.CoderUtils.decodeFromByteArray(CoderUtils.java:133)
at com.google.cloud.dataflow.sdk.util.MutationDetectors$CodedValueMutationDetector.<init>(MutationDetectors.java:108)
at com.google.cloud.dataflow.sdk.util.MutationDetectors.forValueWithCoder(MutationDetectors.java:45)
at com.google.cloud.dataflow.sdk.transforms.ParDo$ImmutabilityCheckingOutputManager.output(ParDo.java:1218)
at com.google.cloud.dataflow.sdk.util.DoFnRunner$DoFnContext.outputWindowedValue(DoFnRunner.java:329)
at com.google.cloud.dataflow.sdk.util.DoFnRunner$DoFnProcessContext.output(DoFnRunner.java:483)
at com.telstra.cdf.rmr.model.pardos.ParDoAbstractCampaignUAKeyExtractor.processElement(ParDoAbstractCampaignUAKeyExtractor.java:5

这是我们的抽象类,

@DefaultCoder(AvroCoder.class)
public abstract class SuperClassKey {
public SuperClassKey(){}
public abstract double getSomeValue();
}

这是子类

@DefaultCoder(AvroCoder.class)
public class SubClassKey extends SuperClassKey {
public String foo;

public SubClassKey() {
}

public SubClassKey(String foo){
this.foo = foo;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

SubClassKey that = (SubClassKey) o;

if (!foo.equals(that.foo)) return false;

return true;
}

@Override
public int hashCode() {
return foo.hashCode();
}

@Override
public double getSomeValue() {
return foo;
}
}

我也尝试过使用接口(interface)但没有成功。

Key之间是否可以有一个共同的抽象类或接口(interface)?

最佳答案

问题可能是由于使用了 PCollection<SuperClassKey>而不是 PCollection<SubClassKey> . PCollection 需要用一个具体的类来键入。可以使用 .setCoder(AvroCoder.of(SubClassKey.class)) 显式指定编码器如果类型推断是不够的。

关于google-cloud-dataflow - 具有通用功能的 Google Cloud Dataflow 自定义键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34057140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com