gpt4 book ai didi

apache-flink - 如何知道本地窗口属于哪个子任务

转载 作者:行者123 更新时间:2023-12-04 04:17:02 26 4
gpt4 key购买 nike

flink流中可以知道本地窗口属于哪个子任务吗?我想用getRuntimeContext().getIndexOfThisSubtask() TriggerPolicy 中的方法实现。

最佳答案

目前没有办法用 TriggerPolicy 获取窗口操作符所在子任务的索引。在跑。

但是,您可以通过放置 map 来解决它。上游操作,为每个数据元素分配子任务的当前索引。

DataStream<Tuple2<Integer, String>> ds = env.fromElements(
new Tuple2<Integer, String>(1, "a"),
new Tuple2<Integer, String>(2, "b"),
new Tuple2<Integer, String>(1, "c"),
new Tuple2<Integer, String>(2, "d"));

ds.groupBy(0)
.map(new RichMapFunction<Tuple2<Integer,String>, Tuple3<Integer, Integer, String>>() {
@Override
public Tuple3<Integer, Integer, String> map(Tuple2<Integer, String> integerStringTuple2) throws Exception {
return new Tuple3<Integer, Integer, String>(
getRuntimeContext().getIndexOfThisSubtask(),
integerStringTuple2.f0,
integerStringTuple2.f1);
}
})
.window(new TestingTriggerPolicy(), new TestingEvictionPolicy())
.mapWindow(new WindowMapFunction<Tuple3<Integer, Integer, String>, String>() {
@Override
public void mapWindow(Iterable<Tuple3<Integer, Integer, String>> iterable, Collector<String> collector) throws Exception {
StringBuilder builder = new StringBuilder();

for (Tuple3<Integer, Integer, String> element : iterable) {
builder.append(element.toString() +"; ");
}

collector.collect(builder.toString());
}
})

关于apache-flink - 如何知道本地窗口属于哪个子任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32322864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com