Запись распределенных данных в выход местоположение
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
- Расположение папки для записи данныхРасположение папки для записи данных, заданное как вектор символов или строка. 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
D
- Входной массивВходной массив, заданный как распределенный массив.
filepattern
- Шаблон именования файловШаблон именования файла, заданный как строка или вектор символов. Шаблон именования файлов должен содержать папку для записи файлов, а затем имя файла, включающее подстановочный символ *
. 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'
и один из разрешенных типов файлов: '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'
- Пользовательская функция записиПользовательская функция записи, заданная как разделенная разделенными запятой парами, состоящая из 'WriteFcn'
и указатель на функцию. Заданная функция получает блоки данных от D
и отвечает за создание файлов выхода. Можно использовать 'WriteFcn'
аргумент пары "имя-значение" для записи данных в различные форматы, даже если выходной формат не поддерживается непосредственно write
.
Пользовательская функция записи должна принимать два входных параметров, info
и data
:
function myWriter(info, data)
data
содержит блок данных из D
.
info
- структура с полями, содержащими информацию о блоке данных. Можно использовать поля, чтобы создать новое имя файла, которое является глобально уникальным в окончательном расположении. Структурные поля:
Область | Описание |
---|---|
RequiredLocation | Полный путь к временной выходной папке. Все выходные файлы должны быть записаны в эту папку. |
RequiredFilePattern | Шаблон файла, необходимый для имен выходных файлов. Это поле пустое, если задано только имя папки. |
SuggestedFilename | Полное, глобально уникальное имя файла, соответствующее требованиям к расположению и именованию. |
PartitionIndex | Индекс записываемого раздела распределенного массива. |
NumPartitions | Общее количество разделов в распределенном массиве. |
BlockIndexInPartition | Положение текущего блока данных внутри раздела. |
IsFinalBlock | true если текущий блок является конечным блоком раздела. |
Имя файла, используемое для выходных файлов, определяет порядок чтения файлов позже. 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'
- Индикатор записи имен переменных в виде заголовков столбцаtrue
или 1
(по умолчанию) | false
или 0
Индикатор записи имен переменных в качестве заголовков столбца, заданный как разделенная разделенными запятой парами, состоящая из 'WriteVariableNames'
и числовое или логическое 1
(true
) или 0
(false
).
Индикатор | Поведение |
---|---|
| Имена переменных включаются в качестве заголовков столбца выхода. Это поведение по умолчанию. |
| Имена переменных не включаются в выходы. |
'DateLocale'
- Локаль для записи датЛокаль для записи дат, заданная как разделенная разделенными запятой парами, состоящая из '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'
| ...Символ разделителя полей, заданный как разделенная разделенными запятой парами, состоящая из 'Delimiter'
и один из следующих спецификаторов:
Спецификатор | Разделитель полей |
---|---|
| Запятая. Это поведение по умолчанию. |
| Пространство |
| Вкладка |
| Точка с запятой |
| Вертикальный брус |
Можно использовать 'Delimiter'
аргумент пары "имя-значение" только для текстовых файлов с разделителями.
Пример: 'Delimiter','space'
или 'Delimiter',"space"
'QuoteStrings'
- Индикатор для записи цитируемого текстаfalse
(по умолчанию) | true
Индикатор записи цитируемого текста, заданный как разделенная разделенными запятой парами, состоящая из 'QuoteStrings'
и любой из них false
или true
. Если 'QuoteStrings'
является true
, затем write
заключает текст в двойные кавычки и заменяет любые символы с двойной кавычкой, которые появляются как часть этого текста, два символов с двойной кавычкой. Для получения примера смотрите Запись текста с кавычками в файл CSV.
Можно использовать 'QuoteStrings'
аргумент пары "имя-значение" только с разделителями текстовых файлов.
'Encoding'
- Схема кодирования символов'UTF-8'
| 'ISO-8859-1'
| 'windows-1251'
| 'windows-1252'
| ...Схема кодирования символов, сопоставленная с файлом, задается как разделенная разделенными запятой парами, состоящая из 'Encoding'
и 'system'
или стандартное имя схемы кодирования символов, подобное одному из значений в этой таблице. Когда вы не задаете ни одну кодировку или не задаете кодировку следующим 'system'
, write
функция использует кодировку по умолчанию системы для записи файла.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
Пример: 'Encoding','system'
или 'Encoding',"system"
использует системную кодировку по умолчанию.
'Sheet'
- Целевой листЦелевой лист, заданный как разделенная разделенными запятой парами, состоящая из '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
'VariableCompression'
- Алгоритм сжатия паркета'snappy'
(по умолчанию) | 'brotli'
| 'gzip'
| 'uncompressed'
| ячеек символьных векторов | строкового вектораАлгоритм сжатия 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'})
'VariableEncoding'
- Имена схем кодирования'auto'
(по умолчанию) | 'dictionary'
| 'plain'
| ячеек символьных векторов | строкового вектораИмена схем кодирования, заданные как одно из следующих значений:
'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'})
'Version'
- Используется версия Parquet'2.0'
(по умолчанию) | '1.0'
Используемая версия 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
функция для создания контрольных точек или моментальных снимков данных во время работы. Эта практика позволяет вам восстанавливать распределенные массивы непосредственно из файлов на диске, а не повторно выполнять все команды, которые создали распределенный массив.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.