#apache-flink #flink-streaming #ensemble-learning
Вопрос:
Контекст моего вопроса заключается в следующем:
У меня есть некоторый входной поток: DataStream <String> input_stream= . . .
Во-первых, я выполняю операцию flatMap, чтобы заполнить/скопировать входной поток в 3 идентичных экземпляра с 3 разными идентификаторами.
structured_stream = input_stream.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>
с результатом Tuple2<String, Integer>
Строка | Целое число |
---|---|
входной поток | 1 |
входной поток | 2 |
входной поток | 3 |
Таким образом, промежуточные результаты-это входной поток с другим идентификатором
Затем выполните операцию keyBy со вторым атрибутом…
Важно уточнить, что из среды потока данных мы перешли в среду потока ключей
KeyedStream<Tuple2<Integer, Integer>> partial_result = structured_stream.keyBy(1).flatMap(new StatefulMap());
Я реализовал функцию StatefulMap, которая по сути является состоянием для каждого ключа.
static class StatefulMap extends RichFlatMapFunction<Tuple2<String, Integer>,...> {}
Каждое состояние выдает мне вывод (через коллектор), который содержит ответ о данном входном потоке.
Итак, у меня есть три частичных результата.
Целое число | Строка | Целое число (Идентификатор состояния) |
---|---|---|
Ответ 1 | входной поток | Состояние 1 |
Ответ 2 | входной поток | Состояние 2 |
Ответ 3 | входной поток | Состояние 3 |
МОЙ ВОПРОС ТАКОВ:
Есть ли какой-либо способ, которым я могу собрать все эти частичные результаты из 3 различных потоков с ключами и создать общую пользовательскую агрегацию/накопитель, такую как взвешенное голосование (извлечение одного конечного результата)? (не на основе ключа, а на основе input_stream)
Другими словами, существуют ли какие-либо способы объединения нескольких потоков с ключами и выполнения отдельных функций агрегирования в Apache Flink?
P.S. Мое текущее решение-записать каждый поток ключей в один и тот же приемник Apache Kafka, а затем запустить второе задание, выполняющее мою пользовательскую функцию агрегирования на основе входного потока данных. По сути, я преобразую потоки с ключами в один единый поток данных, но добавляю второе задание, называемое накладными расходами.
Для тех, кому интересно, я внедряю обучение ансамблю в Apache Flink.
Комментарии:
1. Вы можете использовать объединение для объединения отдельных потоков вместе.