无法使用编码器编译元素AvroCoder'

时间:2017-05-19 20:32:34

标签: java encode avro google-cloud-dataflow apache-beam

在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。

Full Strack Trace

根本原因看起来是堆栈跟踪的这一部分:

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>> {
} 

0 个答案:

没有答案