#apache-flink #data-partitioning
#apache-flink #разделение данных
Вопрос:
Я знаю, что Flink поставляется с пользовательскими API-интерфейсами разбиения. Однако проблема в том, что после вызова partitionCustom
a DataStream
вы получаете DataStream
back, а не a KeyedStream
.
С другой стороны, вы не можете переопределить стратегию разбиения для a KeyedStream
.
Я действительно хочу использовать KeyedStream
, потому что API for DataStream
не имеет reduce
sum
операторов and и из-за автоматически разделенного внутреннего состояния.
Я имею в виду, если количество слов равно:
words.map(s -> Tuple2.of(s, 1)).keyBy(0).sum(1)
Хотел бы я написать:
words.map(s -> Tuple2.of(s, 1)).partitionCustom(myPartitioner, 0).sum(1)
Есть ли какой-либо способ добиться этого?
Спасибо!
Ответ №1:
Из документации Flink (начиная с версии 1.2.1), что делают разделители, так это разделяют данные физически по своим ключам, указывая только их местоположения, хранящиеся в разделе физически на компьютере, которые на самом деле логически не сгруппировали данные в keyed stream. Чтобы выполнить суммирование, нам все равно нужно сгруппировать их по ключам, используя оператор «keyBy», тогда нам разрешено выполнять операции «sum». Подробности, пожалуйста, см. «https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/datastream_api.html#physical-partitioning » 🙂