exponenta event banner

написать

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

Описание

пример

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' и дескриптор функции.

Примеры

свернуть все

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

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

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

Можно записывать данные в локальные папки на компьютере, папки в общей сети или в удаленные папки, такие как Amazon S3™, Windows Azure ® Storage Blob или распределенная файловая система 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 для паркетных файлов

  • .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

Только файлы паркета

свернуть все

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

  • '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' кодирование может быть более быстрым для переменных, которые не содержат много повторяющихся значений. Если размер словаря или количество уникальных значений становится слишком большим, кодировка автоматически возвращается к простой кодировке. Дополнительные сведения о кодировании паркета см. в разделе Определения кодирования паркета.

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

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

Используемая версия паркета, указанная как '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