запись

Запишите распределенные данные в выходное местоположение

Синтаксис

write(location, D)
write(filepattern,D)
write(___,Name,Value)

Описание

пример

write(location, D) написали значения в распределенном массиве D к файлам в папке location. Данные хранятся в эффективном двоичном формате, подходящем для чтения назад с помощью datastore(location). Если не распределенный по первому измерению, MATLAB® перераспределяет данные перед записью, так, чтобы получившиеся файлы могли быть перечитаны с помощью datastore.

пример

write(filepattern,D) использует расширение файла от filepattern, чтобы определить выходной формат. filepattern должен включать папку, чтобы записать файлы во вместе с именем файла, которое включает подстановочный знак *. Подстановочный знак представляет инкрементные числа для генерации уникальных имен файлов, например, write('folder/myfile_*.csv',D).

пример

write(___,Name,Value) задает дополнительные опции с одним или несколькими аргументами пары "имя-значение" с помощью любого из предыдущих синтаксисов. Например, можно задать тип файла с 'FileType' и типом правильного файла ('mat', 'seq', 'parquet', 'text' или 'spreadsheet'), или можно задать пользовательскую функцию записи, чтобы обработать данные с 'WriteFcn' и указателем на функцию.

Примеры

свернуть все

Этот пример показывает, как записать распределенный массив в файловую систему, затем считайте его назад использование datastore.

Создайте распределенный массив и запишите его в выходную папку.

d = distributed.rand(5000,1);
location = 'hdfs://myHadoopCluster/some/output/folder';
write(location, d);

Воссоздайте распределенный массив из записанных файлов.

ds = datastore(location);
d1 = distributed(ds);

Этот пример показывает, как записать распределенные массивы в различные форматы с помощью шаблона файла.

Составьте распределенную таблицу и запишите его в основанный на простом тексте формат, который могут считать много приложений.

dt = distributed(array2table(rand(5000,3)));
location = "/tmp/CSVData/dt_*.csv";
write(location, dt);

Воссоздайте распределенную таблицу из записанных файлов.

ds = datastore(location);
dt1 = distributed(ds);

Можно записать распределенные данные и считать их назад как высокие данные и наоборот.

Создайте распределенное расписание и запишите его в диск.

dt = distributed(array2table(rand(5000,3)));
location = "/tmp/CSVData/dt_*.csv";
write(location, dt);

Создайте длинную таблицу из записанных файлов.

 ds = datastore(location);
 tt = tall(ds);

Также можно считать данные, записанные из высоких данных в распределенные данные. Создайте длинное расписание и запишите его в диск.

tt = tall(array2table(rand(5000,3)));
location = "/tmp/CSVData/dt_*.csv";
write(location, tt);

Читайте назад в распределенное расписание.

 ds = datastore(location);
 dt = distributed(ds);

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

Создайте простую функцию записи, которая выписывает файлы электронной таблицы.

function dataWriter(info, data)
       filename = info.SuggestedFilename;
       writetable(data, filename, "FileType", "spreadsheet");
end

Составьте распределенную таблицу и запишите его в диск с помощью пользовательской функции записи.

dt = distributed(array2table(rand(5000,3)));
location = "/tmp/MyData/tt_*.xlsx";
write(location, dt, "WriteFcn", @dataWriter);

Входные параметры

свернуть все

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

  • Существующая пустая папка, которая не содержит никакие другие файлы

  • Новая папка, которую создает write

write поддерживает удаленные местоположения, такие как Amazon S3™, Windows Azure® Storage Blob или Hadoop® Distributed File System (HDFS™). Для получения дополнительной информации смотрите работу с Удаленными данными (MATLAB).

Пример: location = '../../dir/data'

Пример: location = 'C:\Users\MyName\Desktop'

Пример: location = 'hdfs://myHadoopCluster/some/output/folder'

Пример: location = 's3://bucketname/some/output/folder'

Типы данных: char | string

Входной массив, заданный как распределенный массив.

Шаблон именования файла, заданный как строка или вектор символов. Шаблон именования файла должен содержать папку, чтобы записать файлы во вместе с именем файла, которое включает подстановочный знак *. write заменяет подстановочный знак на порядковые номера, чтобы гарантировать уникальные имена файлов.

Пример: write('folder/data_*.txt',D) пишет распределенному массиву D как серию файлов .txt в folder с именами файлов data_1.txt, data_2.txt, и так далее.

Типы данных: char | string

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: write('C:\myData', D, 'FileType', 'text', 'WriteVariableNames', false) пишет распределенному массиву D в C:\myData как набор текстовых файлов, которые не используют имена переменных в качестве заголовков столбцов.

Общие опции

свернуть все

Тип файла, заданного как пара, разделенная запятой, состоящая из 'FileType' и одни из позволенных типов файлов: 'auto', 'mat', 'parquet', 'seq', 'text' или 'spreadsheet'.

Используйте пару "имя-значение" 'FileType' с аргументом location, чтобы задать какой файлы, чтобы записать. По умолчанию write пытается автоматически обнаружить соответствующий тип файла. Вы не должны задавать аргумент пары "имя-значение" 'FileType', если write может определить тип файла от расширения в аргументах location или filepattern. write может определить тип файла от этих расширений:

  • .mat для файлов данных MATLAB

  • .parquet или .parq для файлов Паркета

  • .seq для файлов последовательности

  • .txt, .dat или .csv для файлов разделенного текста

  • .xls, .xlsx, .xlsb, .xlsm, .xltx или .xltm для файлов электронной таблицы

Пример: write('C:\myData', D, 'FileType', 'text')

Пользовательская функция записи, заданная как пара, разделенная запятой, состоящая из 'WriteFcn' и указателя на функцию. Заданная функция получает блоки данных от D и ответственна за создание выходных файлов. Можно использовать аргумент пары "имя-значение" 'WriteFcn', чтобы записать данные во множестве форматов, даже если выходной формат непосредственно не поддержан write.

Функциональная подпись

Пользовательская функция записи должна принять два входных параметра, info и data:

function myWriter(info, data)

  • data содержит блок данных от D.

  • info является структурой с полями, которые содержат информацию о блоке данных. Можно использовать поля, чтобы создать новое имя файла, которое глобально уникально в итоговом местоположении. Поля структуры:

    Поле Описание
    RequiredLocationПолностью определенный путь к временной выходной папке. Все выходные файлы должны быть записаны в эту папку.
    RequiredFilePatternШаблон файла требуется для имен выходного файла. Это поле пусто, если только имя папки задано.
    SuggestedFilenameПолностью определенное, глобально уникальное имя файла, которое соответствует требования именования и местоположение.
    PartitionIndexИндекс распределенного раздела массивов записан.
    NumPartitionsОбщее количество разделов в распределенном массиве.
    BlockIndexInPartitionПоложение текущего блока данных в разделе.
    IsFinalBlocktrue, если текущий блок является итоговым блоком раздела.

Именование файла

Имя файла, используемое для выходных файлов, определяет порядок, что файлы читаются, въезжают задним ходом позже datastore. Если порядок вопросов файлов, то лучшая практика состоит в том, чтобы использовать поле SuggestedFilename, чтобы назвать файлы начиная с предложенного имени, гарантирует порядок файла. Если вы не используете предложенное имя файла, пользовательская функция записи должна создать глобально уникальный, правильно упорядоченные имена файлов. Имена файлов должны следовать за шаблоном именования, обрисованным в общих чертах в RequiredFilePattern. Имена файлов должны быть уникальными и правильно упорядоченные между рабочими, даже при том, что каждый рабочий пишет в его собственную локальную папку.

Массивы с несколькими разделами

Распределенный массив разделен на разделы, чтобы упростить выполняющие вычисления на массиве параллельно с Parallel Computing Toolbox™. При записи распределенного массива каждый из разделов разделен на меньшие блоки.

info содержит несколько полей, связанных с разделами: PartitionIndex, NumPartitions, BlockIndexInPartition и IsFinalBlock. Эти поля полезны, когда вы выписываете один файл и добавляете к нему, который является общей задачей для массивов с большими разделами, которые были разделены во многие блоки. Пользовательская функция записи вызвана однажды на блок, и блоки в одном разделе всегда пишутся по порядку на одном рабочем. Однако различные разделы могут быть записаны различными рабочими.

Функция, взятая в качестве примера,

Простая функция записи, которая выписывает файлы электронной таблицы:

function dataWriter(info, data)
  filename = info.SuggestedFilename;
  writetable(data, filename, 'FileType', 'spreadsheet')
end
Чтобы вызвать dataWriter как функцию записи для некоторых данных D, используйте команды:
D = distributed(array2table(rand(5000,3)));
location = '/tmp/MyData/D_*.xlsx';
write(location, D, 'WriteFcn', @dataWriter);
Для каждого блока функция dataWriter использует предложенное имя файла в структуре info и вызывает writetable, чтобы выписать файл электронной таблицы. Предложенное имя файла учитывает шаблон именования файла, который задан в аргументе location.

Типы данных: function_handle

Текст или файлы электронной таблицы

свернуть все

Индикатор для записи имен переменных как заголовки столбцов, заданные как пара, разделенная запятой, состоящая из 'WriteVariableNames' и числового или логического 1 (true) или 0 (false).

Индикатор

Поведение

true

Имена переменных включены как заголовки столбцов вывода. Это поведение по умолчанию.

false

Имена переменных не включены в вывод.

Локаль для записи дат, заданных как пара, разделенная запятой, состоящая из 'DateLocale' и вектора символов или скаляра строки. При записи значений datetime в файл используйте DateLocale, чтобы задать локаль, в которой write должен написать имена месяца и дня недели и сокращения. Вектор символов или строка принимают форму xx_YY, где xx является строчный ISO 639-1 двухбуквенный код, указывающий на язык, и YY является прописной альфой ISO 3166-1 2 кода, указывающие на страну. Для списка общих ценностей для локали смотрите аргумент пары "имя-значение" Locale для функции datetime.

Для файлов Excel® write пишет переменные, содержащие массивы datetime как даты Excel, и игнорирует значение параметров 'DateLocale'. Если переменные datetime содержат годы или до 1 900 или до 1904, то write пишет переменные как текст. Для получения дополнительной информации о датах Excel смотрите Различия между 1900 и 1 904 системами дат в Excel.

Пример: 'DateLocale','ja_JP' или 'DateLocale',"ja_JP"

Типы данных: char | string

Текстовые файлы только

свернуть все

Символ разделителя полей, заданный как пара, разделенная запятой, состоящая из 'Delimiter' и один из этих спецификаторов:

Спецификатор

Разделитель полей

','

'comma'

Запятая. Это поведение по умолчанию.

' '

'space'

Пробел

'\t'

'tab'

Вкладка

';'

'semi'

Точка с запятой

'|'

'bar'

Вертикальная панель

Можно использовать аргумент пары "имя-значение" 'Delimiter' только для файлов разделенного текста.

Пример: 'Delimiter','space' или 'Delimiter',"space"

Индикатор для записи заключенного в кавычки текста, заданного как пара, разделенная запятой, состоящая из 'QuoteStrings' и или false или true. Если 'QuoteStrings' является true, то write заключает текст в двойные кавычки и заменяет любые символы двойной кавычки, которые появляются как часть того текста с двумя символами двойной кавычки. Для примера смотрите Запись Заключенный в кавычки текст к файлу CSV (MATLAB).

Можно использовать аргумент пары "имя-значение" 'QuoteStrings' только с файлами разделенного текста.

Схема кодировки символов, сопоставленная с файлом, заданным как пара, разделенная запятой, состоящая из 'Encoding' и 'system' или схемы кодирования стандартного символа, называет как одно из значений в этой таблице. Когда вы не задаете кодирования или задаете кодирование как 'system', функция write использует ваше кодирование системного значения по умолчанию, чтобы записать файл.

'Big5'

'ISO-8859-1'

'windows-874'

'Big5-HKSCS'

'ISO-8859-2'

'windows-949'

'CP949'

'ISO-8859-3'

'windows-1250'

'EUC-KR'

'ISO-8859-4'

'windows-1251'

'EUC-JP'

'ISO-8859-5'

'windows-1252'

'EUC-TW'

'ISO-8859-6'

'windows-1253'

'GB18030'

'ISO-8859-7'

'windows-1254'

'GB2312'

'ISO-8859-8'

'windows-1255'

'GBK'

'ISO-8859-9'

'windows-1256'

'IBM866'

'ISO-8859-11'

'windows-1257'

'KOI8-R'

'ISO-8859-13'

'windows-1258'

'KOI8-U'

'ISO-8859-15'

'US-ASCII'

 

'Macintosh'

'UTF-8'

 

'Shift_JIS'

 

Пример: 'Encoding','system' или 'Encoding',"system" используют кодирование системного значения по умолчанию.

Файлы электронной таблицы только

свернуть все

Целевой рабочий лист, заданный как пара, разделенная запятой, состоящая из 'Sheet' и вектора символов или скаляра строки, содержащего имя рабочего листа или положительное целое число, указывающее на индекс рабочего листа. Имя рабочего листа не может содержать двоеточие (:). Чтобы определить имена листов в файле электронной таблицы, используйте [status,sheets] = xlsfinfo(filename).

Если лист не существует, то write добавляет новый лист в конце набора рабочего листа. Если лист является индексом, больше, чем количество рабочих листов, то write добавляет пустые листы, пока количество рабочих листов в рабочей книге не равняется индексу листа. В любом случае write генерирует предупреждение, указывающее, что это добавило новый рабочий лист.

Можно использовать аргумент пары "имя-значение" 'Sheet' только с файлами электронной таблицы.

Пример: 'Sheet', 2

Пример: 'Sheet', 'MySheetName'

Типы данных: char | string | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Устелите паркетом файлы только

свернуть все

Устелите паркетом алгоритм сжатия, заданный как одно из этих значений.

  • 'Snappy', 'Brotli' или 'Uncompressed'. Если вы задаете один алгоритм сжатия затем, write сжимает все переменные с помощью того же алгоритма.

  • Также можно задать массив ячеек из символьных векторов или вектор строки, содержащий имена алгоритмов сжатия, чтобы использовать для каждой переменной.

В целом сжатие 'Snappy' имеет лучшую производительность для чтения и записи, в то время как 'Brotli' обычно производит меньший размер файла.

Пример: write('C:\myData',D,'FileType','parquet','VariableCompression','Brotli')

Ограничения

В некоторых случаях write(location, D, 'FileType', type) создает файлы, которые не представляют исходный массив D точно. Если вы используете datastore(location), чтобы считать файлы контрольной точки, то результат не может иметь того же формата или содержимого как исходная распределенная таблица.

Для 'text' и типов файлов 'spreadsheet', write использует эти правила:

  • write выходные числовые переменные с помощью формата longG, и категориальный, символ или строковые переменные как закрывший кавычки текст.

  • Для нетекстовых переменных, которые имеют больше чем один столбец, write выходные параметры несколько разделенных от разделителя полей на каждой строке, и создают подходящие заголовки столбцов для первой строки файла.

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

  • Для переменных со знаком ячейки, write выходные параметры содержимое каждой ячейки как одна строка, в нескольких разделенных от разделителя полях, когда содержимое является числовым, логическим, символ, или категориальным, и выводит одно пустое поле в противном случае.

Не используйте 'text' или типы файлов 'spreadsheet', если необходимо записать точную контрольную точку распределенного массива.

Советы

  • Используйте функцию write, чтобы создать контрольные точки или снимки состояния ваших данных, как вы работаете. Эта практика позволяет вам восстанавливать распределенные массивы непосредственно из файлов на диске вместо того, чтобы повторно выполнить все команды, которые произвели распределенный массив.

Введенный в R2017a