【发布时间】:2018-04-21 17:44:26
【问题描述】:
我有一个基于 Apache Flink 的流应用程序,设置如下:
- 数据源:每分钟生成一次数据。
- 使用大小=100、滑动=1 的 CountWindow 的窗口化流(滑动计数窗口)。
- ProcessWindowFunction 对 Window 中的数据应用一些计算(比如 F(x) )。
- 使用输出流的数据接收器
这很好用。现在,我想让用户提供一个函数 G(x) 并将其应用于 Window 中的当前数据,并将输出实时发送给用户
我不是在询问如何应用任意函数 G(x) - 我正在使用动态脚本来做到这一点。我在问如何从另一个流的映射函数访问窗口中的缓冲数据。
一些代码需要澄清
DataStream<Foo> in = .... // source data produced every minute
in
.keyBy(new MyKeySelector())
.countWindow(100, 1)
.process(new MyProcessFunction())
.addSink(new MySinkFunction())
// The part above is working fine. Note that windowed stream created by countWindow() function above has to maintain internal buffer. Now the new requirement
DataStream<Function> userRequest = .... // request function from user
userRequest.map(new MapFunction<Function, FunctionResult>(){
public FunctionResult map(Function Gx) throws Exception {
Iterable<Foo> windowedDataFromAbove = // HOW TO GET THIS???
FunctionResult result = Gx.apply(windowedDataFromAbove);
return result;
}
})
【问题讨论】:
标签: apache-flink flink-streaming