Apache Flink:我可以获取 WindowFunction 中关键字段的名称吗?
Apache Flink: Can I get the name of the key field in a WindowFunction?
我有一个 DataStream 有不同的字段,我想通过 keyBy 对其进行聚合计算(计数,平均,..)
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"))...
我有一个 DataStream 有不同的字段,我想通过 keyBy 对其进行聚合计算(计数,平均,..)
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"))...