Уменьшает ли мигание на лету в пакетном режиме - PullRequest
0 голосов
/ 07 сентября 2018

Согласно потоковой документации Flink:

Функция окна может быть одной из: ReduceFunction, FoldFunction или WindowFunction. Первые два могут быть выполнены более эффективно (см. Раздел Размер), потому что Flink может постепенно агрегировать элементы для каждого окна по мере их поступления.

Применяется ли то же самое в пакетном режиме? В приведенном ниже примере я читаю ~ 36go данных из Кассандры, но я ожидаю, что уменьшенный выходной сигнал будет намного меньше (~ 0.5go). Для выполнения этого задания потребуется flink для сохранения всего ввода в памяти или он достаточно умен, чтобы просто перебирать его

DataSet<MyRecord> input = ...;
DataSet<MyRecord> sampled = input
        .groupBy(MyRecord::getSampleKey)
        .reduce(MyRecord::keepLast);

1 Ответ

0 голосов
/ 20 сентября 2018

В документации по операции уменьшения во Flink я вижу следующее:

Уменьшение преобразования, применяемого к сгруппированному DataSet, уменьшает каждая группа в один элемент, используя пользовательскую функцию сокращения. Для каждой группы входных элементов последовательно выполняется функция уменьшения объединяет пары элементов в один элемент, пока только один элемент для каждой группы остается.

Обратите внимание, что для ReduceFunction ключевые поля возвращаемого объекта должен соответствовать входным значениям. Это потому, что сокращение неявно комбинируемый и объекты, испускаемые оператором объединения, снова сгруппированы по ключу при передаче оператору приведения.

Если я правильно читаю, Flink выполняет операцию уменьшения на стороне преобразователя и снова на стороне преобразователя , поэтому данные, которые фактически передаются / сериализуются, должны быть маленький.

...