You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "yankai zhang (JIRA)" <ji...@apache.org> on 2019/04/08 02:41:00 UTC
[jira] [Comment Edited] (FLINK-12113) User code passing to
fromCollection(Iterator, Class) not cleaned
[ https://issues.apache.org/jira/browse/FLINK-12113?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16812049#comment-16812049 ]
yankai zhang edited comment on FLINK-12113 at 4/8/19 2:40 AM:
--------------------------------------------------------------
Interesting. I guess maybe java has some optimizing to make your anonymous class instance static, so you don't have reference to outer _this_. I find [an explaination on stackoverflow|[https://stackoverflow.com/a/758616/4281058]]. Actually there is no outer _this_ in your case, you can try putting your code into an instance method instead of static main.
was (Author: vision57):
Interesting. I guess maybe java has some optimizing to make your anonymous class instance static, so you don't have reference to outer _this_. I find [an explaination on stackoverflow|[https://stackoverflow.com/a/758616/4281058].] Actually there is no outer _this_ in your case, you can try putting your code into an instance method instead of static main.
> User code passing to fromCollection(Iterator, Class) not cleaned
> ----------------------------------------------------------------
>
> Key: FLINK-12113
> URL: https://issues.apache.org/jira/browse/FLINK-12113
> Project: Flink
> Issue Type: Bug
> Components: API / DataStream
> Affects Versions: 1.7.2
> Reporter: yankai zhang
> Priority: Major
> Attachments: image-2019-04-07-21-52-37-264.png
>
>
>
> {code:java}
> interface IS<E> extends Iterator<E>, Serializable { }
> StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
> env.fromCollection(new IS<Object>() {
> @Override
> public boolean hasNext() {
> return false;
> }
> @Override
> public Object next() {
> return null;
> }
> }, Object.class);
> {code}
> Code piece above throws exception:
> {code:java}
> org.apache.flink.api.common.InvalidProgramException: The implementation of the SourceFunction is not serializable. The object probably contains or references non serializable fields.
> at org.apache.flink.api.java.ClosureCleaner.clean(ClosureCleaner.java:99)
> ....{code}
> And my workaround is wrapping clean around iterator instance, like this:
>
> {code:java}
> StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
> env.fromCollection(env.clean(new IS<Object>() {
> @Override
> public boolean hasNext() {
> return false;
> }
> @Override
> public Object next() {
> return null;
> }
> }), Object.class);
> {code}
>
>
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)