Если у вас есть Parallel Computing Toolbox™, можно использовать длинные массивы в локальном MATLAB® сеанс или локальный параллельный пул. Можно также запустить вычисления длинный массив на кластере, если установлены MATLAB Parallel Server™. Этот пример использует рабочие места в локальном кластере на вашем компьютере. Можно разрабатывать код локально, а затем масштабировать, чтобы воспользоваться возможностями, предлагаемыми Parallel Computing Toolbox и MATLAB Parallel Server, не переписывая алгоритм. См. также Рабочий процесс Больших данных с использованием высоких массивов и хранилищ данных.
Создайте datastore и преобразуйте его в длинная таблица.
ds = datastore('airlinesmall.csv'); varnames = {'ArrDelay', 'DepDelay'}; ds.SelectedVariableNames = varnames; ds.TreatAsMissing = 'NA';
Если у вас установлен Parallel Computing Toolbox, когда вы используете tall
Функция MATLAB автоматически запускает параллельный пул работников, если вы не отключите выбор параллельного пула по умолчанию. Кластер по умолчанию использует локальные рабочие места на вашем компьютере.
Примечание
Если вы хотите отключить автоматическое открытие параллельного пула, измените свои параллельные настройки. Если вы отключите опцию Automatically create a parallel pool, необходимо явно запустить пул, если вы хотите tall
функция, чтобы использовать его для параллельной обработки. См. Раздел «Задание параллельных настроек»
Если у вас есть Parallel Computing Toolbox, можно запустить тот же код, что и в примере длинная таблица MATLAB, и автоматически выполнить его параллельно на рабочих местах вашей локальной машины.
Создайте длинную таблицу tt
из datastore.
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);
Примечание
Одним из преимуществ разработки алгоритмов с длинные массивы является то, что вам нужно записать код только один раз. Вы можете разработать свой код локально, а затем использовать mapreducer
масштабирование до кластера, без необходимости переписывать алгоритм. Для получения примера смотрите Использование Длинных массивов на кластере Hadoop с поддержкой Spark.
datastore
| gather
| mapreducer
| parpool
| table
| tall