Google cloud dataflow SDK版本0.4.150414中断的作业

Google cloud dataflow SDK版本0.4.150414中断的作业,google-cloud-dataflow,Google Cloud Dataflow,从Maven获取了最新的SDK版本(0.4.150414),我们的工作现在失败了 我们将其追溯到一个HashMap的反序列化,该HashMap在我们的一个类中使用,并且被ParDo转换引用 意见: 在本地运行时,以及在中的CDF服务上运行时,它都会断开 云 在调用processElement之前,已正确填充HashMap 在processElement方法中放置断点表明HashMap具有不同的对象ID(必须来自对原始HashMap的反序列化),但它现在为空,即所有元素都已丢失 我们回滚到版本0

从Maven获取了最新的SDK版本(0.4.150414),我们的工作现在失败了

我们将其追溯到一个HashMap的反序列化,该HashMap在我们的一个类中使用,并且被ParDo转换引用

意见:

  • 在本地运行时,以及在中的CDF服务上运行时,它都会断开 云
  • 在调用
    processElement
    之前,已正确填充HashMap
  • processElement
    方法中放置断点表明HashMap具有不同的对象ID(必须来自对原始HashMap的反序列化),但它现在为空,即所有元素都已丢失
  • 我们回滚到版本0.3.150326,该版本运行良好。
SDK最新版本中的序列化/反序列化功能是否有任何更改


如果您需要,很高兴将我们的代码发送到反馈电子邮件。

在最新版本中进行了更改,以在传递给ParDo.of时克隆DoFn。如果多次使用DoFn并在两次使用之间进行修改,这将导致更好的行为

如果在DoFn被传递给ParDo.of之后填充HashMap字段,则会出现您描述的问题

您可以通过在ParDo.of设置断点并检查DoFn的状态来确认这一点。要解决此问题,请在调用ParDo.of之前初始化该字段


希望这有帮助

很抱歉听到这个消息。在0.4中更改了很多内容,但我不知道有任何向后不兼容的序列化更改。你能不能用一些伪代码来更新这个问题,这些伪代码描述了你的HashMap在哪里,以及你是如何在管道中使用它的?把代码发送给你不是更容易(更快)吗?是的,它会-让我们这样做吧。请通过电子邮件发送数据流-feedback@google.com.ok,就在路上。我们已经将版本回滚到0.3.150326以使其再次工作,因此您需要做的是将build.gradle更改为“0.4.150414”,以针对该版本的SDK运行它。是的,这就是问题所在。现在修好了。非常感谢你。但是,如果您还没有这样做,您应该在某个地方清楚地记录此功能。这是一条至关重要的实施信息,可能也会让其他人注意到:)