SDK 版本 0.4.150414 损坏的作业
Jobs broken with SDK version 0.4.150414
从 Maven 中提取了最新的 SDK 版本 (0.4.150414),但我们的作业现在失败了。
我们已经将其追溯到我们 类 之一中使用的 HashMap 的反序列化,并被 ParDo 转换引用。
观察:
- 当 运行 在本地和在
云。
- 在调用
processElement
之前正确填充了 HashMap
- 在
processElement
方法中放置断点表明 HashMap 具有不同的对象 ID(这必须来自反序列化原始 HashMap),但它现在是空的,即所有元素都已丢失。
- 我们回滚到版本 0.3.150326,它在那个版本上运行良好。
最新版 SDK 中的 serialization/deserialization 功能有什么变化吗?
如果您需要,很高兴将我们的代码发送到反馈邮箱。
最新版本进行了更改以在传递给 ParDo.of 时克隆 DoFn。如果多次使用 DoFn 并在两次使用之间进行修改,这会导致更好的行为。
如果在将 DoFn 传递给 ParDo.of 后填充 HashMap 字段,就会发生您描述的问题。
您可以通过在 ParDo.of 处设置断点并检查那里的 DoFn 状态来确认这一点。要解决此问题,请在调用 ParDo.of.
之前初始化该字段
希望对您有所帮助!
从 Maven 中提取了最新的 SDK 版本 (0.4.150414),但我们的作业现在失败了。
我们已经将其追溯到我们 类 之一中使用的 HashMap 的反序列化,并被 ParDo 转换引用。
观察:
- 当 运行 在本地和在 云。
- 在调用
processElement
之前正确填充了 HashMap - 在
processElement
方法中放置断点表明 HashMap 具有不同的对象 ID(这必须来自反序列化原始 HashMap),但它现在是空的,即所有元素都已丢失。 - 我们回滚到版本 0.3.150326,它在那个版本上运行良好。
最新版 SDK 中的 serialization/deserialization 功能有什么变化吗?
如果您需要,很高兴将我们的代码发送到反馈邮箱。
最新版本进行了更改以在传递给 ParDo.of 时克隆 DoFn。如果多次使用 DoFn 并在两次使用之间进行修改,这会导致更好的行为。
如果在将 DoFn 传递给 ParDo.of 后填充 HashMap 字段,就会发生您描述的问题。
您可以通过在 ParDo.of 处设置断点并检查那里的 DoFn 状态来确认这一点。要解决此问题,请在调用 ParDo.of.
之前初始化该字段希望对您有所帮助!