我有一个DataStream,它具有不同的字段,我想通过它们对(计数,平均值,..)进行聚合计算
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的apply函数的键中有了此值)。
原因:我想对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)
答案 0 :(得分:1)
否,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"))...