【发布时间】:2020-03-08 19:39:29
【问题描述】:
我正在使用 Java 将 JSON 转换为 Avro,并使用 Google DataFlow 将这些存储到 GCS。 Avro 模式是在运行时使用 SchemaBuilder 创建的。
我在架构中定义的字段之一是可选的 LONG 字段,它的定义如下:
SchemaBuilder.FieldAssembler<Schema> fields = SchemaBuilder.record(mainName).fields();
Schema concreteType = SchemaBuilder.nullable().longType();
fields.name("key1").type(concreteType).noDefault();
现在,当我使用上面的架构创建 GenericRecord 并且未设置“key1”时,将生成的 GenericRecord 放入我的 DoFn 的上下文中时:context.output(res); 我收到以下错误:
线程“主”org.apache.beam.sdk.Pipeline$PipelineExecutionException: org.apache.avro.UnresolvedUnionException: Not in union ["long","null"]: 256
我也尝试用withDefault(0L) 做同样的事情,得到了同样的结果。
我错过了什么? 谢谢
【问题讨论】:
-
能否用完整的管道代码更新您的帖子?
标签: java google-cloud-dataflow avro apache-beam