Возможно ли узнать, какая подзадача принадлежит локальному окну в потоковом потоке? Я хочу использовать метод getRuntimeContext().getIndexOfThisSubtask()
в версиях TriggerPolicy
.Как узнать, какое SubTask принадлежит локальному окну
3
A
ответ
2
На данный момент нет способа получить индекс подзадачи, на котором работает оператор оконной обработки с запуском 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());
}
})
Смежные вопросы
- 1. Как узнать, кому принадлежит ReaderWriterLockSlim?
- 2. Какое поколение языков принадлежит SQL?
- 3. Определить, какое сообщение страницы принадлежит
- 4. Как закрыть клавиатуру программно, которая не принадлежит текущему окну
- 5. Как узнать, какое слово подчеркнуто?
- 6. Как узнать, какое слово соответствует?
- 7. Как узнать, какое приложение открыто?
- 8. Как узнать, какое событие воспитывался
- 9. Как узнать, какое приложение установить
- 10. Как узнать, какое изображение выбрано
- 11. узнать, кто принадлежит к группам
- 12. Как узнать, принадлежит ли объект классу x?
- 13. Как узнать, принадлежит ли закрытие классу?
- 14. Как узнать, какой ребенок принадлежит их родителям?
- 15. Как узнать, принадлежит ли точка указанной строке?
- 16. Как узнать, какая библиотека javascript принадлежит $
- 17. Как узнать, что одна кривая принадлежит другому?
- 18. JPBM/BPMN Diagram/Drools - Как использовать Subtask
- 19. Какое пространство имен принадлежит фабричному классу?
- 20. В докере, как узнать, какой образ принадлежит данному источнику?
- 21. Как получить, какое приложение подключено к самому верхнему окну?
- 22. Как узнать, какое хранилище используется JVM?
- 23. Как узнать, какое действие вызвало возобновление
- 24. Как узнать, работает ли какое-либо приложение?
- 25. Как узнать, какое текстовое поле выбрано?
- 26. Как узнать, какое дистрибутив Linux я использую?
- 27. Как узнать, какое расширение вызывается в Asterisk?
- 28. Как узнать, какое действие вызывает событие?
- 29. Как узнать, какое приложение работает на экране?
- 30. Как узнать, какое устройство установлено и удалено
Спасибо, я просто знаю, что локальное окно и его нисходящий оператор (например, mapWindow) обрабатываются последовательно в одном потоке. – zhangshengxiong
@zhangshengxiong, обрабатываемый одним или несколькими потоками, здесь не проблема. Вы должны избегать перетасовки данных, которая разрушит разбиение ваших элементов и, таким образом, отображение ваших элементов в индекс подзадачи. Но пока вы используете локальные окна, это не должно быть проблемой. –