В этом примере показано, как получить доступ к большому набору данных в облаке и обработать его в облачном кластере с использованием возможностей MATLAB для больших данных.
Узнайте, как:
Доступ к общедоступному большому набору данных в Amazon Cloud.
Найдите и выберите интересное подмножество этого набора данных.
Чтобы обработать это подмножество менее чем за 20 минут, используйте хранилища данных, массивы tall и панель инструментов Parallel Computing Toolbox.
Набор общедоступных данных в этом примере является частью Набора национальных данных Wind Integration, или Инструментария WIND [1], [2], [3], [4]. Дополнительные сведения см. в разделе Набор инструментов для национального набора данных Wind Integration.
Для выполнения этого примера необходимо настроить доступ к кластеру в Amazon AWS. В MATLAB можно создавать кластеры в Amazon AWS непосредственно с рабочего стола MATLAB. На вкладке Главная в меню Параллельный выберите Создать кластеры и управление ими. В диспетчере профилей кластера щелкните Создать облачный кластер. Можно также использовать Cloud Center MathWorks для создания вычислительных кластеров в Amazon AWS и доступа к ним. Дополнительные сведения см. в разделе Начало работы с облачным центром.
В этом примере используется набор данных Techno-Economic WIND Toolkit. Он содержит 2 Тбайт (терабайт) данных для оценок и прогнозов ветроэнергетики вместе с атмосферными переменными с 2007 по 2013 год в пределах континентальной части США.
Techno-Economic WIND Toolkit доступен через Amazon Web Services, в местоположении s3 ://pywtk-data. Он содержит два набора данных:
s3://pywtk-data/met_data - Метрологические данные
s3://pywtk-data/fcst_data - Прогнозные данные
Для работы с удаленными данными в Amazon S3 необходимо определить переменные среды для учетных данных AWS. Дополнительные сведения о настройке доступа к удаленным данным см. в разделе Работа с удаленными данными. В следующем коде замените YOUR_AWS_ACCESS_KEY_ID и YOUR_AWS_SECRET_ACCESS_KEY с собственными учетными данными Amazon AWS.
setenv("AWS_ACCESS_KEY_ID","YOUR_AWS_ACCESS_KEY_ID"); setenv("AWS_SECRET_ACCESS_KEY","YOUR_AWS_SECRET_ACCESS_KEY");
Этот набор данных требует указания его географического региона, поэтому необходимо задать соответствующую переменную среды.
setenv("AWS_DEFAULT_REGION","us-west-2");
Чтобы предоставить работникам кластера доступ к удаленным данным, добавьте эти имена переменных среды в EnvironmentVariables свойства профиля кластера. Чтобы изменить свойства профиля кластера, воспользуйтесь диспетчером профилей кластера в разделе «Параллель» > «Создание кластеров и управление ими».
Набор данных объемом 2 Тбайт достаточно велик. В этом примере показано, как найти подмножество набора данных, который требуется проанализировать. В примере рассматриваются данные по штату Массачусетс.
Сначала получите идентификаторы, которые идентифицируют метрологические станции в Массачусетсе, и определите файлы, которые содержат их метрологическую информацию. Метаданные для каждой станции находятся в файле с именем three_tier_site_metadata.csv. Поскольку эти данные малы и помещаются в память, доступ к ним можно получить из клиента MATLAB с помощью readtable. Вы можете использовать readtable функция доступа к открытым данным в S3 интервалах непосредственно без необходимости записи специального кода.
tMetadata = readtable("s3://pywtk-data/three_tier_site_metadata.csv",... "ReadVariableNames",true,"TextType","string");
Чтобы узнать, какие состояния перечислены в этом наборе данных, используйте unique.
states = unique(tMetadata.state)
states = 50×1 string array
""
"Alabama"
"Arizona"
"Arkansas"
"California"
"Colorado"
"Connecticut"
"Delaware"
"District of Columbia"
"Florida"
"Georgia"
"Idaho"
"Illinois"
"Indiana"
"Iowa"
"Kansas"
"Kentucky"
"Louisiana"
"Maine"
"Maryland"
"Massachusetts"
"Michigan"
"Minnesota"
"Mississippi"
"Missouri"
"Montana"
"Nebraska"
"Nevada"
"New Hampshire"
"New Jersey"
"New Mexico"
"New York"
"North Carolina"
"North Dakota"
"Ohio"
"Oklahoma"
"Oregon"
"Pennsylvania"
"Rhode Island"
"South Carolina"
"South Dakota"
"Tennessee"
"Texas"
"Utah"
"Vermont"
"Virginia"
"Washington"
"West Virginia"
"Wisconsin"
"Wyoming"
Определите, какие станции расположены в штате Массачусетс.
index = tMetadata.state == "Massachusetts"; siteId = tMetadata{index,"site_id"};
Данные для данного терминала содержатся в файле, который соответствует этому соглашению об именовании: s3://pywtk-data/met_data/folder/site_id.nc, где folder является ближайшим целым числом, меньшим или равным site_id/500. С помощью этого соглашения составьте местоположение файла для каждой станции.
folder = floor(siteId/500);
fileLocations = compose("s3://pywtk-data/met_data/%d/%d.nc",folder,siteId);Для доступа и обработки данных, не помещающихся в память, можно использовать хранилища данных и массивы уровня. При выполнении вычислений больших данных MATLAB получает доступ к меньшим частям удаленных данных по мере необходимости, поэтому не требуется загружать весь набор данных одновременно. При использовании массивов tall MATLAB автоматически разбивает данные на блоки меньшего размера, которые помещаются в память для обработки.
При наличии панели инструментов Parallel Computing Toolbox MATLAB может обрабатывать множество блоков параллельно. Параллелизация позволяет выполнять анализ на одном рабочем столе с локальными работниками или масштабировать до кластера для получения дополнительных ресурсов. При использовании кластера в той же облачной службе, что и данные, данные остаются в облаке, и вы получаете преимущества от улучшенного времени передачи данных. Хранение данных в облаке также является более экономичным. Этот пример был выполнен менее чем за 20 минут с использованием 18 работников на машине c4.8xlarge в Amazon AWS.
При использовании параллельного пула в кластере MATLAB обрабатывает эти данные с использованием работников кластера. Создайте параллельный пул в кластере. В следующем коде используйте имя профиля кластера. Присоедините сценарий к пулу, так как параллельные работники должны получить доступ к функции помощника в пуле.
p = parpool("myAWSCluster");Starting parallel pool (parpool) using the 'myAWSCluster' profile ... connected to 18 workers.
addAttachedFiles(p,mfilename("fullpath"));Создайте хранилище данных с данными метрологии для станций в штате Массачусетс. Данные представлены в виде файлов формы сетевых общих данных (NetCDF), и для их интерпретации необходимо использовать пользовательскую функцию чтения. В этом примере эта функция называется ncReader и считывает данные NetCDF в расписания. Его содержимое можно просмотреть в конце этого сценария.
dsMetrology = fileDatastore(fileLocations,"ReadFcn",@ncReader,"UniformRead",true);
Создайте высокое расписание с метрологическими данными из хранилища данных.
ttMetrology = tall(dsMetrology)
ttMetrology =
M×6 tall timetable
Time wind_speed wind_direction power density temperature pressure
____________________ __________ ______________ ______ _______ ___________ ________
01-Jan-2007 00:00:00 5.905 189.35 3.3254 1.2374 269.74 97963
01-Jan-2007 00:05:00 5.8898 188.77 3.2988 1.2376 269.73 97959
01-Jan-2007 00:10:00 5.9447 187.85 3.396 1.2376 269.71 97960
01-Jan-2007 00:15:00 6.0362 187.05 3.5574 1.2376 269.68 97961
01-Jan-2007 00:20:00 6.1156 186.49 3.6973 1.2375 269.83 97958
01-Jan-2007 00:25:00 6.2133 185.71 3.8698 1.2376 270.03 97952
01-Jan-2007 00:30:00 6.3232 184.29 4.0812 1.2379 270.19 97955
01-Jan-2007 00:35:00 6.4331 182.51 4.3382 1.2382 270.3 97957
: : : : : : :
: : : : : : :
Получить среднюю температуру в месяц с помощью groupsummaryи отсортировать полученную таблицу высокого уровня. Для обеспечения производительности MATLAB откладывает большинство операций высокого уровня до тех пор, пока не потребуются данные. В этом случае график данных инициирует оценку отложенных вычислений.
meanTemperature = groupsummary(ttMetrology,"Time","month","mean","temperature"); meanTemperature = sortrows(meanTemperature);
Постройте график результатов.
figure; plot(meanTemperature.mean_temperature,"*-"); ylim([260 300]); xlim([1 12*7+1]); xticks(1:12:12*7+1); xticklabels(["2007","2008","2009","2010","2011","2012","2013","2014"]); title("Average Temperature in Massachusetts 2007-2013"); xlabel("Year"); ylabel("Temperature (K)")

Многие функции MATLAB поддерживают массивы tall, что позволяет выполнять различные вычисления для наборов больших данных с использованием привычного синтаксиса. Дополнительные сведения о поддерживаемых функциях см. в разделе Поддержка функций.
Данные в Techno-Economic WIND Toolkit сохраняются в файлах NetCDF. Определите пользовательскую функцию чтения для считывания ее данных в расписание. Дополнительные сведения о чтении файлов NetCDF см. в разделе Файлы NetCDF.
function t = ncReader(filename) % NCREADER Read NetCDF File (.nc), extract data set and save as a timetable % Get information about NetCDF data source fileInfo = ncinfo(filename); % Extract variable names and datatypes varNames = string({fileInfo.Variables.Name}); varTypes = string({fileInfo.Variables.Datatype}); % Transform variable names into valid names for table variables if any(startsWith(varNames,["4","6"])) strVarNames = replace(varNames,["4","6"],["four","six"]); else strVarNames = varNames; end % Extract the length of each variable fileLength = fileInfo.Dimensions.Length; % Extract initial timestamp, sample period and create the time axis tAttributes = struct2table(fileInfo.Attributes); startTime = datetime(cell2mat(tAttributes.Value(contains(tAttributes.Name,"start_time"))),"ConvertFrom","epochtime"); samplePeriod = seconds(cell2mat(tAttributes.Value(contains(tAttributes.Name,"sample_period")))); % Create the output timetable numVars = numel(strVarNames); tableSize = [fileLength numVars]; t = timetable('Size',tableSize,'VariableTypes',varTypes,'VariableNames',strVarNames,'TimeStep',samplePeriod,'StartTime',startTime); % Fill in the timetable with variable data for k = 1:numVars t(:,k) = table(ncread(filename,varNames{k})); end end
[1] Draxl, C., Б. М. Ходж, А. Клифтон и Дж. Маккэа. Обзор и метеорологическая валидация национального набора данных по интеграции ветра (Технический отчет, NREL/TP-5000-61740). Golden, CO: Национальная лаборатория возобновляемых источников энергии, 2015.
[2] Draxl, C., Б. М. Ходж, А. Клифтон и Дж. Маккэа. «Набор национальных данных по интеграции ветра (WIND)». Прикладная энергия. Том 151, 2015, стр. 355-366.
[3] Кинг, Дж., А. Клифтон и Б. М. Ходж. Проверка выдачи мощности для инструментария WIND (Технический отчет, NREL/TP-5D00-61714). Golden, CO: Национальная лаборатория возобновляемых источников энергии, 2014.
[4] Либерман-Криббин, В., К. Дракль и А. Клифтон. Руководство по использованию кода проверки инструментария WIND (Технический отчет, NREL/TP-5000-62595). Golden, CO: Национальная лаборатория возобновляемых источников энергии, 2014.
datastore | parpool | readtable | tall