Весь смысл использования такого процесса, как сокращение карты, состоит в том, чтобы разделить рабочую нагрузку между несколькими компьютерами, одновременно обеспечивая одновременность, невозможную на современных компьютерах. Если у вас нет планов по объединению нескольких устройств Android, вам не нужно использовать что-то вроде hadoop.
Если вы можете загрузить все данные на устройство (то, что вы говорите, вы можете сделать). Самое близкое к параллельному запуску алгоритма - использовать несколько потоков и разделить ваши данные. Вам не нужно выполнять программирование с уменьшением стилей, чтобы получить преимущества параллельного программирования, и вам может быть проще разработать свой алгоритм как модель производителя / потребителя. Но если у вас есть это, вот способ сделать это.
Я бы начал с двух BlockingQueues (в очереди и вне очереди) и потока для чтения ваших данных из файла (т.е. производителя). Создайте пул потоков для чтения из очереди и записи в очередь. Каждый поток выполнит вычисление на одном из входных данных (то есть потребителя) и отправит результаты в очередь, чтобы производитель мог получить результаты. Выполнение одного прохода через входящую и исходящую очередь выполнит половину процесса уменьшения карты. Это обычно упоминается как производитель / потребитель. С этой архитектурой стиля можно многое сделать.
Если вы хотите выполнить полное уменьшение карты, повторите процесс, чтобы шаг сокращения выполнялся параллельно. Производитель будет собирать все результаты с карты шаг за шагом и отправлять их обратно в очередь. Каждый потребитель теперь должен выполнить шаг сокращения и отправить свои результаты обратно в очередь, где производитель выполнит окончательную сортировку и представит результаты в пользовательском интерфейсе.
Поэтому полный переход состояния для источника будет:
- Разбор входного файла и создание рабочих нагрузок для помещения в очередь.
- Чтение результатов из очереди, пока не будут выполнены все процессы карты.
- Объедините результаты по ключу.
- Запишите все результаты с тем же ключом в очередь, что и одна единица работы. Повторите эти действия для всех полученных уникальных ключей.
- Считать все результаты, возвращающиеся в очередь.
Переходы состояния потребителя будут:
- Считать единицу работы из очереди.
- Выполнить логику карты для этой единицы работы.
- Запишите результат + ключ в очередь.
- Читать единицу работы из очереди.
- Выполните логику сокращения для этой единицы работы.
- Запишите результат в очередь out.
Карта альта уменьшает рамки стиля на андроид.