【发布时间】:2016-06-15 21:59:56
【问题描述】:
我在 Google Cloud Data Flow 中收到以下错误:
java.lang.RuntimeException: com.google.cloud.dataflow.sdk.util.UserCodeException: java.lang.RuntimeException: com.google.cloud.dataflow.sdk.util.UserCodeException: java.lang.RuntimeException: com .google.cloud.dataflow.sdk.util.UserCodeException:java.lang.RuntimeException:java.lang.RuntimeException:com.google.cloud.dataflow.sdk.util.UserCodeException:java.lang.RuntimeException:java.lang.RuntimeException :com.google.cloud.dataflow.sdk.coders.CoderException:无法在 com.google.cloud.dataflow.sdk.runners.worker.SimpleParDoFn$1.output(SimpleParDoFn.java:162) 处编码空字符串 com.google.cloud.dataflow.sdk.util.DoFnRunnerBase$DoFnContext.outputWindowedValue(DoFnRunnerBase.java:287) 在 com.google.cloud.dataflow.sdk.util.DoFnRunnerBase$DoFnProcessContext.output(DoFnRunnerBase.java:449) 在 报告.transforms.JsonToObject.processElement(JsonToObject.java:35)
原因:com.google.cloud.dataflow.sdk.util.UserCodeException:java.lang.RuntimeException:com.google.cloud.dataflow.sdk.util.UserCodeException:java.lang.RuntimeException:com.google。 cloud.dataflow.sdk.util.UserCodeException: java.lang.RuntimeException: java.lang.RuntimeException: com.google.cloud.dataflow.sdk.util.UserCodeException: java.lang.RuntimeException: java.lang.RuntimeException: com. google.cloud.dataflow.sdk.coders.CoderException:无法在 com.google.cloud.dataflow.sdk.util.UserCodeException.wrap(UserCodeException.java:35) 在 com.google.cloud.dataflow.sdk 编码空字符串.util.UserCodeException.wrapIf(UserCodeException.java:40) 在 com.google.cloud.dataflow.sdk.util.DoFnRunnerBase.wrapUserCodeException(DoFnRunnerBase.java:368) 在 com.google.cloud.dataflow.sdk.util.SimpleDoFnRunner .invokeProcessElement(SimpleDoFnRunner.java:51) 在 com.google.cloud.dataflow.sdk.util.DoFnRunnerBase.processElement(DoFnRunnerBase.java:138) 在 com.google.cloud.dataflow.sdk.runners.worker。 SimpleParDoFn.processElement(SimpleParDoFn.java:190) 在 com.google.cloud.dataflow.sdk.runners.worker.ForwardingParDoFn.processElement(ForwardingParDoFn.java:42) 在 com.google.cloud.dataflow.sdk.runners.worker。 DataflowWorkerLoggingParDoFn.processElement(DataflowWorkerLoggingParDoFn.java:47) 在 com.google.cloud.dataflow.sdk.util.common.worker.ParDoOperation.process(ParDoOperation.java:53) 在 com.google.cloud.dataflow.sdk.util.common.worker.OutputReceiver.process(OutputReceiver.java:52) 在 com.google.cloud.dataflow.sdk.runners.worker.SimpleParDoFn$1.output(SimpleParDoFn.java:160) 在 com.google.cloud.dataflow.sdk.util.DoFnRunnerBase$DoFnContext.outputWindowedValue(DoFnRunnerBase.java:287) 在 com.google.cloud.dataflow.sdk.util.DoFnRunnerBase$DoFnProcessContext.output(DoFnRunnerBase.java:449) 在 报告.transforms.JsonToObject.processElement(JsonToObject.java:35) 在 com.google.cloud.dataflow.sdk.util.SimpleDoFnRunner.invokeProcessElement(SimpleDoFnRunner.java:49) 在 com.google.cloud.dataflow.sdk.util.DoFnRunnerBase.processElement(DoFnRunnerBase.java:138)
在我的班级 (JsonToObject) 中,我执行以下操作:
如果 (obj != null) { processContext.output(obj); }
以及引发异常的地方。
知道为什么会这样吗?
【问题讨论】:
-
看起来您的编码器很可能是复合编码器,并且您的对象中某处有一个空字符串。你是如何设置编码器的?此外,如果您自己构建编码器,NullableCoder 可能会有用
-
我使用的是默认编码器,不是自己设置的。但是是的,我的对象有可以为空的字符串成员,为什么会出现问题?
-
NullableCoder 不能设置为默认解码器?我收到以下错误 java.lang.IllegalArgumentException: Class com.google.cloud.dataflow.sdk.coders.NullableCoder is missing required static method of (TypeDescriptor)。