java-Flink表API无法将 DataSet transformation为数据流


0

我使用的是Flink Table API,使用Java将 DataSet transformation为数据流。。。。以下是我的代码:

TableEnvironment tableEnvironment=new TableEnvironment();
Table tab1=table.where("related_value < 2014").select("related_value,ref_id");
DataSet<MyClass>ds2=tableEnvironment.toDataSet(tab1, MyClass.class);
DataStream<MyClass> d=tableEnvironment.toDataStream(tab1, MyClass.class);

但是当我试图执行这个程序时,它抛出了以下异常:

org.apache.flink网站.api.table.ExpressionException:JavaStreamingTranslator的 root无效:Root(ArraySeq((related_value,Double),(ref峎id,String)))。您是否尝试将基于 DataSet 的表 transformation为数据流,或者反之亦然?我想知道如何使用Flink Table API将 DataSet transformation为数据流??

另一件事我想知道,对于模式匹配,有一个Flink-CEP库有,但是使用Flink Table API进行模式匹配是否可行??

2 答案


0

Flink的TableAPI并不是为了将 DataSet transformation为数据流而设计的,反之亦然。用Table API是不可能做到的,目前也没有其他方法可以用Flink实现。

统一数据流和 DataSet API(将批处理作为流的一种特殊情况,即作为有界流处理)是Flink的长期路线图。


0

使用TableEnvironment时无法 transformation为DataStream API,必须创建一个StreamTableEnvironment以从表 transformation为数据流,如下所示:

final EnvironmentSettings fsSettings = EnvironmentSettings.newInstance().useBlinkPlanner().inStreamingMode().build();
final StreamTableEnvironment fsTableEnv = StreamTableEnvironment.create(configuration, fsSettings);
DataStream<String> finalRes = fsTableEnv.toAppendStream(tableNameHere, MyClass.class);

希望能对你有所帮助。

谨致问候!


我来回答

写文章

提问题

面试题