Можно ли узнать, к какой подзадаче принадлежит локальное окно при потоковой передаче flink? Я хочу использовать метод getRuntimeContext().getIndexOfThisSubtask()
в реализациях TriggerPolicy
.
Как узнать, к какой подзадаче принадлежит локальное окно
Ответы (1)
На данный момент нет способа получить индекс подзадачи, над которой работает оконный оператор с 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());
}
})
person
Till Rohrmann
schedule
01.09.2015
Спасибо, я просто знаю, что локальное окно и его подчиненный оператор (например, mapWindow) обрабатываются последовательно в одном потоке.
- person zhangshengxiong; 01.09.2015
@zhangshengxiong, обработка одним или несколькими потоками здесь не проблема. Чего вам следует избегать, так это перетасовки данных, которая разрушит разделение ваших элементов и, следовательно, сопоставление ваших элементов с индексом подзадачи. Но пока вы используете локальные окна, это не должно быть проблемой.
- person Till Rohrmann; 01.09.2015