Apache Flink:我能得到WindowFunction中键字段的名称吗



我有一个DataStream,它有不同的字段,我想对其进行keyBy以对(count,average,..(进行聚合计算

stream.keyBy("field1").window().aggregate(AggFunc, WindowFunc)...
stream.keyBy("field2").window().aggregate(AggFunc, WindowFunc)...
stream.keyBy("field3").window().aggregate(AggFunc, WindowFunc)...

有没有办法在以后的WindowFunc中获得键控字段的名称("field1"、"field2"、"field3"(请注意,我想要的是字段名称"field1",而不是字段可能的值(我在WindowFunction的应用函数中已经有了这个键(。

原因:我想对3个聚合使用相同的WindowFunc-在这里,我将window_start_time、key_field_name和key_value添加到结果中。

想要的结果示例:

-字段1 上键入的流

("field1", "field1-val1", 3, window1)
("field1", "field1-val2", 5, window1)

-字段2 上键入的流

("field2", "field2-val1", 6, window1)
("field2", "field2-val2", 7, window1)

否,WindowFunction不允许访问键字段的名称。但是,您可以向WindowFunction的构造函数添加一个参数,并在那里传递字段名。

这看起来类似于下面的示例

// define window function
public static class MyWindowFunc implements WindowFunction<...> { 
private final String keyname;
public MyWindowFunc(String keyname) {
this.keyname = keyname;
}    
...
}
// use window function
stream.keyBy("field1").window().aggregate(AggFunc, new MyWindowFunc("field1"))...
stream.keyBy("field2").window().aggregate(AggFunc, new MyWindowFunc("field2"))...
stream.keyBy("field3").window().aggregate(AggFunc, new MyWindowFunc("field3"))...

相关内容

  • 没有找到相关文章

最新更新