Flink Table API无法将DataSet转换为DataStream

时间:2016-05-13 06:10:04

标签: java apache-flink flink-streaming flink-cep

我正在使用Java的Flink Table API,我想将DataSet转换为DataStream ....以下是我的代码:

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(ArraySeq((related_value,Double),(ref_id,String)))。您是否尝试将基于DataSet的表转换为DataStream,反之亦然?我想知道如何使用Flink Table API将DataSet转换为DataStream?

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

2 个答案:

答案 0 :(得分:3)

Flink的Table API并非旨在将DataSet转换为DataStream,反之亦然。使用Table API无法做到这一点,目前还没有其他方法可以使用Flink。

统一DataStreamDataSet API(处理批量处理作为流媒体的特殊情况,即作为有界流)是Flink的长期路线图。

答案 1 :(得分:0)

使用TableEnvironment时无法转换为DataStream API,必须创建StreamTableEnvironment才能从表转换为DataStream,如下所示:

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

希望能以某种方式帮助您。

亲切的问候!