首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DataFlow ProcessContext输出异常ClosedChannelException

DataFlow ProcessContext输出异常ClosedChannelException
EN

Stack Overflow用户
提问于 2015-11-21 05:17:41
回答 1查看 169关注 0票数 2

我正在解析来自流的XML,并将POJO分派到ProcessContext.output。它是跟随ClosedChannelException抛出的。知道是怎么回事吗?

代码语言:javascript
运行
复制
com.google.cloud.dataflow.sdk.util.UserCodeException: java.nio.channels.ClosedChannelException
    at com.google.cloud.dataflow.sdk.util.DoFnRunner.invokeProcessElement(DoFnRunner.java:193)
    at com.google.cloud.dataflow.sdk.util.DoFnRunner.processElement(DoFnRunner.java:171)
    at com.google.cloud.dataflow.sdk.runners.worker.ParDoFnBase.processElement(ParDoFnBase.java:193)
    at com.google.cloud.dataflow.sdk.util.common.worker.ParDoOperation.process(ParDoOperation.java:52)
    at com.google.cloud.dataflow.sdk.util.common.worker.OutputReceiver.process(OutputReceiver.java:52)
    at com.google.cloud.dataflow.sdk.runners.worker.ParDoFnBase$1.output(ParDoFnBase.java:157)
    at com.google.cloud.dataflow.sdk.util.DoFnRunner$DoFnContext.outputWindowedValue(DoFnRunner.java:329)
    at com.google.cloud.dataflow.sdk.util.DoFnRunner$DoFnProcessContext.output(DoFnRunner.java:483)
    at com.myproj.dataflow.MyDocDispatcher.onMyDoc(MyDocDispatcher.java:24)
EN

回答 1

Stack Overflow用户

发布于 2015-11-26 12:22:29

一个可能的原因是,进行XML处理以生成POJO的DoFn实际上懒惰地生成POJO。当您将该POJO传递给ProcessContext#output()时,稍后可能会根据优化器将其直接传递给管道中的其他DoFn

在这种情况下,如果与POJO交互的下游DoFn对接收到的POJO有一些副作用,它就会违反immutability requirements,因为与从ProcessContext#element()接收到的POJO交互会修改它。

如果这就是问题所在,最简单的解决方法是先克隆POJO,然后再将其传递给output()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33836226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档