Получите KeyedStream из настраиваемого разбиения во Flink

Я знаю, что Flink поставляется с пользовательскими API разбиения. Однако проблема в том, что после вызова partitionCustom на DataStream вы получаете обратно DataStream, а не KeyedStream.

С другой стороны, вы не можете переопределить стратегию разделения для KeyedStream.

Я действительно хочу использовать KeyedStream, потому что API для DataStream не имеет операторов reduce и sum и из-за автоматического разделения внутреннего состояния.

Я имею в виду, если количество слов:

words.map(s -> Tuple2.of(s, 1)).keyBy(0).sum(1)

Хотел бы я написать:

words.map(s -> Tuple2.of(s, 1)).partitionCustom(myPartitioner, 0).sum(1)

Есть ли способ добиться этого?

Спасибо!


person affo    schedule 18.10.2016    source источник


Ответы (1)


Из документации Flink (начиная с версии 1.2.1), разделители физически разделяют данные по своим ключам, указывая только их местоположения, хранящиеся в разделе, физически на машине, который на самом деле не сгруппировал данные логически в поток с ключами. . Чтобы сделать резюмирование, нам все еще нужно сгруппировать их по ключам с помощью оператора «keyBy», тогда нам разрешено выполнять операции «суммирования». Подробности см. На странице "https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/datastream_api.html#physical-partitioning ":)

person Xu Yuan    schedule 24.05.2017