为什么Beam AvroIO不能使用运行时参数以及如何在数据流模板中使用AvroIO?

时间:2017-07-07 12:12:15

标签: serialization avro google-cloud-dataflow apache-beam

我尝试将Dataflow中的运行时参数与AvroIO结合使用,以解决序列化问题(java.io.NotSerializableException: org.apache.avro.Schema$RecordSchema)。然后我发现本页底部的表格中遗漏了AvroIO:https://cloud.google.com/dataflow/docs/templates/creating-templates

我想这是由于某些Avro课程无法解决问题,这是真的吗?有计划解决这个问题吗?

如果没有,如果我需要在写入Avro文件的模板中使用运行时参数,我该怎么做?我是否必须放弃模板并以某种方式使我的服务运行并在每次需要时以标准方式部署作业?这意味着我身上有很多额外的网络流量和/或基础设施代码。我有点拒绝相信我是第一个需要同时运行模板化工作并使用Avro的人。人们如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

使用具有特定IO的模板要求IO必须接受将由模板填充的任何参数的ValueProvider版本。 AvroIO尚未被修改为接受ValueProvider参数,因此它尚不支持运行时参数。

鉴于上述情况,我不确定您在哪里获得序列化异常或如何将RuntimeValueProvider传递给AvroIO。为了使这项工作,AvroIO需要更改以支持适当的参数化 - 可能采用模式字符串 - 此时您应该能够将RuntimeValueProvider模式传递给它。