MapReduce / Агрегатные операции в SpringBatch - PullRequest
12 голосов
/ 25 мая 2011

Можно ли выполнять операции в стиле MapReduce в SpringBatch?

У меня есть два шага в моем пакетном задании.Первый шаг вычисляет среднее значение.Второй шаг сравнивает каждое значение со средним, чтобы определить другое значение.

Например, допустим, у меня есть огромная база данных оценок учеников.На первом этапе рассчитывается средний балл по каждому курсу / экзамену.На втором этапе сравниваются индивидуальные оценки со средними, чтобы определить оценку на основе некоторого простого правила:

  1. A, если студент набирает баллы выше среднего
  2. B, если студент набирает средний балл
  3. C, если ученик набирает баллы ниже среднего

В настоящее время мой первый шаг - это Sql, который выбирает среднее значение и записывает его в таблицу.Второй шаг - это Sql, который объединяет средние оценки с индивидуальными и использует Процессор для реализации правила.

Существуют аналогичные функции агрегирования, такие как avg, min, которые часто используются в Steps, и я действительно предпочел бы, если бы это моглобыть сделано в процессорах, сохраняя Sqls как можно более простым.Есть ли способ записать процессор, который агрегирует результаты по нескольким строкам на основе критериев группировки, а затем записывает среднее / минимальное значение в выходную таблицу?

Этот шаблон многократно повторяется, и я не ищу реализацию с одним процессором, использующую Sql, который выбирает как средние, так и индивидуальные оценки.

Ответы [ 2 ]

2 голосов
/ 27 апреля 2012

Это возможно.Вам даже не нужно больше, чем один шаг.Map-Reduce можно реализовать за один шаг.Вы можете создать шаг с ItemReader и ItemWriter, связанными с ним.Думайте о паре ItemReader -ItemWriter как о Map-Reduce.Вы можете добиться необходимого эффекта, используя настраиваемые средства чтения и записи с агрегацией пропплеровских строк.Для вашего читателя / писателя было бы неплохо реализовать интерфейс Stream, чтобы гарантировать промежуточную операцию сохранения StepContext при помощи пакета Spring.

Я пробовал это просто для развлечения, но я думаю, что это бессмысленно, так как ваша работоспособностьдругими словами, ограничено одной JVM: вы не можете достичь производительности производственной среды кластера Hadoop (или других реальных сокращений карт).Кроме того, будет очень трудно быть масштабируемым при увеличении размера данных.

Хорошее наблюдение, но IMO в настоящее время бесполезно для реальных задач.

0 голосов
/ 16 мая 2013

Мне кажется, что среда пакетной обработки должна разделять проблемы программирования / конфигурации и времени выполнения. Было бы неплохо, если бы Spring Batch предоставлял общее решение для всех основных периодов обработки, таких как JVM, Hadoop Cluster (также использует JVM)и т. д.

-> Написание пакетных программ с использованием Spring Batch Programming / Configuration Model, которая объединяет другие модели программирования, такие как map-Reduce, традиционная Java и т. д.потребность (одиночная JVM или Hadoop Cluster или NoSQL).

Spring Data пытается решить ее часть, предоставляя унифицированную модель конфигурации и использование API для различных типов источников данных.).

...