write

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

Описание

пример

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);

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

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 создает

Можно записать данные в локальные папки на компьютере, папки в общей сети или в удаленные местоположения, такие как Amazon S3™, Windows Azure® Больших двоичных объектов хранения данных или Hadoop® Распределенная файловая система (HDFS™). Дополнительные сведения о чтении и записи данных в удаленные местоположения см. в разделе Работа с удаленными данными.

Пример: location = '../../dir/data' задает относительный путь к файлу.

Пример: location = 'C:\Users\MyName\Desktop\data' задает абсолютный путь к Windows® папка рабочего стола.

Пример: location = 'file:///path/to/data' задает абсолютный путь URI к папке.

Пример: location = 'hdfs://myHadoopCluster/some/output/folder' задает URL-адрес HDFS.

Пример: location = 's3://bucketname/some/output/folder' задает расположение S3 Amazon.

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

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

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

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

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

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. 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 для файлов Parquet

  • .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 переменные содержат годы до 1900 или 1904, затем write записывает переменные как текст. Для получения дополнительной информации о датах Excel, смотрите Различия между системой дат 1900 и 1904 в 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.

Можно использовать '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

Только файлы Parquet

свернуть все

Алгоритм сжатия Parquet, заданный в качестве одного из следующих значений.

  • 'snappy', 'brotli', 'gzip', или 'uncompressed'. Если вы задаете один алгоритм сжатия, то write сжимает все переменные с помощью одного и того же алгоритма.

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

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

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

Пример: write('C:\myData', D, 'FileType', 'parquet', 'VariableCompression', {'brotli' 'snappy' 'gzip'})

Имена схем кодирования, заданные как одно из следующих значений:

  • 'auto'write использует 'plain' кодировка для логических переменных и 'dictionary' кодировка для всех остальных.

  • 'dictionary', 'plain' - Если вы задаете одну схему кодирования, то write кодирует все переменные с помощью этой схемы.

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

В целом, 'dictionary' кодировка приводит к меньшим размерам файлов, но 'plain' кодирование может быть более быстрым для переменных, которые не содержат много повторяющихся значений. Если размер словаря или количества уникальных значений увеличивается, чтобы быть слишком большим, то кодировка автоматически возвращается к простой кодировке. Для получения дополнительной информации о кодировках Parquet, смотрите Определения кодировки Parquet.

Пример: write('myData.parquet', D, 'FileType', 'parquet', 'VariableEncoding', 'plain')

Пример: write('myData.parquet', D, 'FileType', 'parquet', 'VariableEncoding', {'plain' 'dictionary' 'plain'})

Используемая версия Parquet, заданная как '1.0' или '2.0'. По умолчанию '2.0' предлагает наиболее эффективную систему хранения данных, но вы можете выбрать '1.0' для самой широкой совместимости с внешними приложениями, поддерживающими формат Parquet.

Ограничения

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

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

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

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

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

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

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

Совет

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

Введенный в R2017a