При наличии Toolbox™ Parallel Computing можно использовать массивы tall в локальной сессии MATLAB ® или в локальном параллельном пуле. Можно также выполнить вычисления массива высокого уровня в кластере, если установлены параллельные Server™ MATLAB. В этом примере используются работники локального кластера на компьютере. Вы можете разработать код локально, а затем расширить его, чтобы воспользоваться возможностями, предлагаемыми Parallel Computing Toolbox и MATLAB Parallel Server, без необходимости переписывать алгоритм. См. также Рабочий процесс больших данных с использованием массивов и хранилищ данных.
Создайте хранилище данных и преобразуйте его в высокую таблицу.
ds = datastore('airlinesmall.csv'); varnames = {'ArrDelay', 'DepDelay'}; ds.SelectedVariableNames = varnames; ds.TreatAsMissing = 'NA';
Если установлена панель инструментов параллельных вычислений, при использовании tall функция MATLAB автоматически запускает параллельный пул работников, если не отключить настройку параллельного пула по умолчанию. Кластер по умолчанию использует локальных работников на компьютере.
Примечание
Если требуется отключить автоматическое открытие параллельного пула, измените настройки параллельного пула. Если отключить параметр Автоматически создавать параллельный пул, необходимо явно запустить пул, если требуется tall использовать его для параллельной обработки. См. раздел Задание параметров параллели.
При наличии панели инструментов Parallel Computing Toolbox можно выполнить тот же код, что и в примере таблицы уровня MATLAB, и автоматически выполнить его параллельно на рабочих локального компьютера.
Создание таблицы высокого уровня tt из хранилища данных.
tt = tall(ds)
Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.
tt =
M×2 tall table
ArrDelay DepDelay
________ ________
8 12
8 1
21 20
13 12
4 -1
59 63
3 -2
11 -1
: :
: :
На дисплее отображается количество строк, M, пока не известно. M является местозаполнителем до завершения расчета.
Извлечь задержку поступления ArrDelay с высокого стола. Это действие создает новую переменную массива высокого уровня для использования в последующих вычислениях.
a = tt.ArrDelay;
Можно указать ряд операций в массиве высокого уровня, которые не выполняются до вызова gather. Это позволяет группировать команды, которые могут занять длительное время. Например, вычислите среднее и стандартное отклонение задержки поступления. Эти значения используются для построения верхнего и нижнего пороговых значений для задержек, которые находятся в пределах 1 стандартного отклонения от среднего значения.
m = mean(a,'omitnan'); s = std(a,'omitnan'); one_sigma_bounds = [m-s m m+s];
Использовать gather вычислять one_sigma_boundsи внести ответ в память.
sig1 = gather(one_sigma_bounds)
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 4.5 sec Evaluation completed in 6.3 sec sig1 = -23.4572 7.1201 37.6975
Можно указать несколько входов и выходов для gather если вы хотите оценить сразу несколько вещей. Это происходит быстрее, чем вызов gather отдельно на каждом высоком массиве. В качестве примера вычислите минимальную и максимальную задержку поступления.
[max_delay, min_delay] = gather(max(a),min(a))
max_delay =
1014
min_delay =
-64
Для разработки в серийном формате без использования локальных работников или указанного кластера введите следующую команду.
mapreducer(0);
mapreducer чтобы изменить среду выполнения после создания массива с высоким значением, этот массив недопустим и его необходимо создать заново. Чтобы снова использовать локальных работников или указанный кластер, введите следующую команду.mapreducer(gcp);
Примечание
Одним из преимуществ разработки алгоритмов с массивами tall является то, что код нужно писать только один раз. Код можно разработать локально, а затем использовать mapreducer для масштабирования до кластера без необходимости перезаписи алгоритма. Пример см. в разделе Использование массивов Tall в кластере Hadoop с поддержкой искр.
datastore | gather | mapreducer | parpool | table | tall