我有一个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"))...