2017-01-22 19 views
2

我一直在Flink遇到InvalidTypesException s,通常在定製一個通用的SourceFunction<OUT>時。這裏,當添加到我的StreamExecutionEnvironment,拋出這些異常在運行時的例子:什麼是不提倡使用Type Hints來閃爍輸出流的方式?

public class MyCustomSource<OUT> extends RichSourceFunction<OUT> { 
    @Override 
    public void run(SourceContext<OUT> sourceContext) throws Exception { 
     OUT foo = null; 
     // ... creates foo somehow ... 
     sourceContext.collect(foo); 
    } 
    @Override 
    public void cancel() { 
     // ... 
    } 
} 

相關的異常文本是:

產生的原因:org.apache.flink.api.common.functions .InvalidTypesException:無法確定'org.apache.flink.streaming.api.functions.source.RichSourceFunction'類中TypeVariable'OUT'的類型。這很可能是一種類型的刪除問題。只有在返回類型中的所有變量都可以從輸入類型推導出來的情況下,類型提取才支持具有通用變量的類型。

發生這種情況OUT是否是一個POJO,通用型,弗林克內部類型如元組等

我已經找到了一種可靠的方式由通過returns()方法添加類型提示,以避免這一點。例如:

final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); 
env.addSource(new MyCustomSource<String>()) 
    .returns(String.class) 
    //.etc. 

但是此方法在flink 1.1.4中已棄用;有沒有人知道提供類型提示的非棄用方式是什麼?該Flink Internals wiki只提到returns(),但它是一年前最後更新。

回答