在GCP数据流中,我将从PCollection
返回以下类的DoFn
。
import java.util.List;
import java.util.Map;
import org.apache.avro.reflect.Nullable;
import com.google.cloud.dataflow.sdk.coders.AvroCoder;
import com.google.cloud.dataflow.sdk.coders.DefaultCoder;
@DefaultCoder(AvroCoder.class)
public class MyClass{
@Nullable
public String id;
@Nullable
public String foo;
@Nullable
public List<Integer> foo2;
@Nullable
public Map<String,List<String>> foo3;
@Nullable
public List<String> foo4;
}
获取错误:
无法使用编码器&#39; AvroCoder&#39;来编码元素MyClass。
根本原因看起来是堆栈跟踪的这一部分:
Caused by: java.lang.ClassCastException:
java.lang.String cannot be cast to java.lang.Number
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:78)
我的DoFn
函数返回HashMap中类的实例,如下所示:
public static class Prep extends DoFn<TableRow, KV<String, MyClass>> {
}