我一直在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()
,但它是一年前最後更新。
謝謝;那就是訣竅。 – kov