exponenta event banner

fileDatastore

Хранилище данных с пользовательским средством чтения файлов

Описание

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

Создание

Описание

fds = fileDatastore(location,'ReadFcn',@fcn) создает хранилище данных из коллекции файлов, указанных в location и использует функцию fcn для чтения данных из файлов.

пример

fds = fileDatastore(location,'ReadFcn',@fcn,Name,Value) задает дополнительные параметры и свойства для fds с использованием одного или нескольких аргументов пары имя-значение. Например, можно указать файлы для включения в хранилище данных в зависимости от их расширений с помощью fileDatastore(location,'ReadFcn',@customreader,'FileExtensions',{'.exts','.extx'}).

Входные аргументы

развернуть все

Файлы или папки, включенные в хранилище данных, указанные как путь или DsFileSet объект.

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

    • Локальные файлы или папки - Указать location как локальный путь к файлам или папкам. Если файлы находятся не в текущей папке, то локальный путь должен указывать полный или относительный путь. Файлы в подпапках указанной папки не включаются автоматически в хранилище данных. При указании локального пути можно использовать подстановочный символ (*). Этот символ указывает, что хранилище данных включает все соответствующие файлы или все файлы в соответствующих папках.

    • Удаленные файлы или папки - Указать location как полный путь к файлам или папкам в виде унифицированного указателя ресурсов (URL) формы hdfs:///path_to_file. Дополнительные сведения см. в разделе Работа с удаленными данными.

  • DsFileSet object - можно также указать location в качестве DsFileSet объект. Дополнительные сведения см. в разделе matlab.io.datastore.DsFileSet.

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

Пример: 'file1.ext'

Пример: '../dir/data/file1.ext'

Пример: {'C:\dir\data\file1.exts','C:\dir\data\file2.extx'}

Пример: 'C:\dir\data\*.ext'

Функция, считывающая данные файла, указанные как дескриптор функции.

Сигнатура функции, представляемая дескриптором функции @fcn зависит от значения указанного ReadMode. Функция, считывающая данные файла, должна подтвердить наличие одной из этих подписей.

ReadMode

ReadFcn подпись

'file' (по умолчанию)

Функция должна иметь следующую подпись:

function data = MyReadFcn(filename)
...
end

filename - Имя файла для чтения.

data - Соответствующие данные файла.

'partialfile'

Функция должна иметь следующую подпись:

function [data,userdata,done] = MyReadFcn(filename,userdata)
...
end

userdata - Установка и чтение полей userdata сохранение данных между несколькими FileDatastore чтение вызовов.

done - Установить logical аргумент для true или false.

  • false - Продолжить чтение текущего файла.

  • true - прервать чтение текущего файла и чтение следующего файла.

data - Часть данных файла.

'byte'

Функция должна иметь следующую подпись:

function data = MyReadFcn(filename,offset,size)
...
end

offset - укажите смещение байта от первого байта в файле.

size - Укажите количество байтов для чтения во время текущей операции чтения.

data - Часть данных файла размера, указанного в BlockSize.

FileDatastore увеличивает оба offset и size входные данные на основе значения, указанного в BlockSize.

Значение, указанное в @fcnзадает значение свойства ReadFcn.

Пример: @customreader

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

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

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: fds = fileDatastore('C:\dir\data','FileExtensions',{'.exts','.extx'})

Флаг включения подпапки, заданный как разделенная запятыми пара, состоящая из 'IncludeSubfolders' и true, false, 0 или 1. Определить true для включения всех файлов и подпапок в каждую папку или false для включения только файлов в каждую папку.

Если не указать 'IncludeSubfolders', тогда значением по умолчанию является false.

Пример: 'IncludeSubfolders',true

Типы данных: logical | double

Расширения файлов пользовательского формата, указанные как разделенная запятыми пара, состоящая из 'FileExtensions' и символьный вектор, массив ячеек символьных векторов, строковый скаляр или строковый массив.

При указании расширения файла fileDatastore создает объект хранилища данных только для файлов с указанным расширением. Можно также создать хранилище данных для файлов без расширений, указав 'FileExtensions' в виде пустого символьного вектора, ''. Если не указать 'FileExtensions', то fileDatastore автоматически включает все файлы в папке.

Пример: 'FileExtensions',''

Пример: 'FileExtensions','.ext'

Пример: 'FileExtensions',{'.exts','.extx'}

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

Функция предварительного просмотра входных данных, заданная как дескриптор функции.

Если функция предварительного просмотра не задана, FileDatastore использует значение, указанное в @ReadFcn в качестве функции предварительного просмотра по умолчанию. Кроме того, можно указать собственную пользовательскую функцию предварительного просмотра данных.

  • @ReadFcn (по умолчанию) - Использовать ReadFcn к образцу FileDatastore данные. Этот параметр может привести к снижению производительности для tall строительство.

  • Function handle - Используйте пользовательскую функцию предварительного просмотра для FileDatastore и tall конструкция для выборки входных данных. Использовать PreviewFcn обеспечивает функцию, считывающую только минимально необходимую часть входных данных для предварительного просмотра и построения с высоким уровнем.

Функция, указанная PreviewFcn должны возвращать значения с теми же типами данных, что и ReadFcn возвращает.

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

Часть файла для чтения, указанная как 'file', 'partialfile', или 'bytes'.

'file' (по умолчанию)

Использовать режим чтения 'file' при использовании пользовательской функции, указанной в ReadFcn, считывает полный файл за одну операцию чтения.

На основе пользовательской функции чтения хранилище данных файла считывает полный файл с каждым вызовом read. Единицей параллелизма является полный файл.

'partialfile'

Использовать режим чтения 'partialfile' при использовании пользовательской функции чтения файла, указанной в ReadFcnсчитывает только часть файла с каждой операцией чтения.

На основе пользовательской функции чтения хранилище данных файла считывает только часть файла с каждым вызовом read функция.

В 'partialfile' режим чтения, единица распараллеливания является полным файлом. Несколько read операции в последовательном формате необходимы для чтения полного файла.

'bytes'

Использовать режим чтения 'bytes' при использовании пользовательской функции, указанной в ReadFcn, читает BlockSize размер части файла с каждой операцией чтения.

FileDatastore устанавливает единицу параллелизма для блока файла, содержащего число байтов, заданное BlockSize.

На основе пользовательской функции чтения хранилище данных файла считывает BlockSize размер частей файла с каждым вызовом функции чтения. Несколько read параллельные операции необходимы для чтения полного файла.

Для использования subset и shuffle функции на FileDatastore объект, необходимо установить 'ReadMode' кому 'file'.

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

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

Чтобы обеспечить возможность распределения нескольких блоков файла между несколькими параллельными работниками MATLAB ®, укажитеBlockSize как положительное целое число, большее, чем 131072 байты (128 килобайт).

Задание или изменение значения BlockSize, сначала необходимо установить ReadMode кому 'bytes'. FileDatastore устанавливает значение по умолчанию BlockSize на основе значения, указанного в ReadMode.

  • Если ReadMode является 'file' или 'partialfile', то FileDatastore устанавливает значение по умолчанию BlockSize кому inf.

  • Если ReadMode является 'bytes', то FileDatastore устанавливает значение по умолчанию BlockSize кому 128 мегабайт.

Альтернативные корневые пути файловой системы, указанные как разделенная запятыми пара, состоящая из 'AlternateFileSystemRoots' и строковый вектор или массив ячеек. Использовать 'AlternateFileSystemRoots' при создании хранилища данных на локальном компьютере, но при необходимости доступа и обработки данных на другом компьютере (возможно, в другой операционной системе). Кроме того, при обработке данных с помощью Toolbox™ Parallel Computing и Server™ MATLAB Parallel, данные хранятся на локальных компьютерах с копией данных, доступных на различных облачных платформах или кластерных машинах, необходимо использовать 'AlternateFileSystemRoots' для связывания корневых путей.

  • Чтобы связать набор корневых путей, эквивалентных друг другу, укажите 'AlternateFileSystemRoots' в виде строкового вектора. Например,

    ["Z:\datasets","/mynetwork/datasets"]

  • Чтобы связать несколько наборов корневых путей, эквивалентных хранилищу данных, укажите 'AlternateFileSystemRoots' как массив ячеек, содержащий несколько строк, где каждая строка представляет набор эквивалентных корневых путей. Укажите каждую строку в массиве ячеек в качестве строкового вектора или массива ячеек в виде символьных векторов. Например:

    • Определить 'AlternateFileSystemRoots' в виде массива ячеек строковых векторов.

      {["Z:\datasets", "/mynetwork/datasets"];...
       ["Y:\datasets", "/mynetwork2/datasets","S:\datasets"]}

    • Либо укажите 'AlternateFileSystemRoots' как массив ячеек массива ячеек символьных векторов.

      {{'Z:\datasets','/mynetwork/datasets'};...
       {'Y:\datasets', '/mynetwork2/datasets','S:\datasets'}}

Значение 'AlternateFileSystemRoots' должны удовлетворять следующим условиям:

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

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

  • Корневые пути уникальны и не являются подпапками друг друга.

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

Дополнительные сведения см. в разделе Настройка хранилища данных для обработки на различных машинах или кластерах.

Пример: ["Z:\datasets","/mynetwork/datasets"]

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

Свойства

развернуть все

FileDatastore свойства описывают файлы, связанные с FileDatastore объект. За исключением Files свойство, можно указать значение FileDatastore с использованием аргументов пары имя-значение. Чтобы просмотреть или изменить свойство после создания объекта, используйте точечную нотацию.

Файлы, включенные в хранилище данных, разрешенные как символьный вектор, массив ячеек символьных векторов, строковый скаляр или строковый массив, где каждый символьный вектор или строка является полным путем к файлу. location аргумент в fileDatastore и datastore функции определяют Files при создании хранилища данных.

Пример: {'C:\dir\data\file1.ext';'C:\dir\data\file2.ext'}

Пример: 'hdfs:///data/*.mat'

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

Это свойство доступно только для чтения.

Папки, используемые для создания хранилища данных, возвращаемого в виде массива ячеек символьных векторов. Массив ячеек ориентирован как вектор-столбец. Каждый вектор символов - это путь к папке, содержащей файлы данных. location аргумент в fileDatastore и datastore функции определяют Folders при создании хранилища данных.

Folders сбрасывается при изменении Files свойство FileDatastore объект.

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

Функция, считывающая данные файла, указанные как дескриптор функции.

Значение, указанное @ fcn, задает значение ReadFcn собственность.

Пример: @MyCustomFileReader

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

Это свойство доступно только для чтения.

Вертикально сцепляемый флаг, заданный как логический true или false. Укажите значение этого свойства при первом создании FileDatastore объект.

true

Многократное чтение FileDatastore объект возвращает однородные данные, которые могут сцепляться по вертикали.

Когда UniformRead значение свойства - true:

  • ReadFcn функция должна возвращать данные, которые являются вертикально сцепляемыми; в противном случае, readall возвращает ошибку.

  • Базовый тип данных вывода tall функция совпадает с типом данных вывода из ReadFcn.

false (по умолчанию)

Многократное чтение FileDatastore объект не возвращает однородные данные, которые могут сцепляться по вертикали.

Когда UniformRead значение свойства - false:

  • readall возвращает массив ячеек.

  • tall возвращает массив высоких ячеек.

Пример: fds = fileDatastore(location,'ReadFcn',@load,'UniformRead',true)

Типы данных: logical | double

Это свойство доступно только для чтения.

Список форматов, поддерживаемых для записи, возвращаемый в виде вектора строк. Это свойство задает возможные форматы вывода при использовании writeall для записи выходных файлов из хранилища данных.

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

Функции объекта

hasdataОпределение доступности данных для чтения
numpartitionsКоличество разделов хранилища данных
partitionРазделение хранилища данных
previewПредварительный просмотр подмножества данных в хранилище данных
readСчитывание данных в хранилище данных
readallСчитывание всех данных в хранилище данных
writeallЗапись хранилища данных в файлы
resetСброс хранилища данных в исходное состояние
transformПреобразовать хранилище данных
combineОбъединение данных из нескольких хранилищ данных
isPartitionableОпределение возможности разделения хранилища данных
isShuffleableОпределение возможности тасования хранилища данных
shuffleПеретасовка всех данных в хранилище данных
subsetСоздание подмножества хранилища данных или набора файлов

Примеры

свернуть все

Создание хранилища данных для файлов в MATLAB ®demos папка, которая имеет .mat расширение.

fds = fileDatastore(fullfile(matlabroot,'toolbox','matlab','demos'),'ReadFcn',@load,'FileExtensions','.mat')

Создание хранилища данных, содержащего все .mat файлы в MATLAB ®demos папка, указание load для считывания данных файла.

fds = fileDatastore(fullfile(matlabroot,'toolbox','matlab','demos'),'ReadFcn',@load,'FileExtensions','.mat')

Прочитайте первый файл в хранилище данных, а затем второй файл.

data1 = read(fds);                   
data2 = read(fds);

Одновременное чтение всех файлов в хранилище данных.

readall(fds);

Инициализация массива ячеек для хранения данных и счетчика i.

dataarray = cell(numel(fds.Files), 1);
i = 1;

Сбросьте хранилище данных в первый файл и считывайте файлы по одному, пока не останется данных. Назначение данных массиву dataarray.

reset(fds);                          
while hasdata(fds)                   
    dataarray{i} = read(fds);
    i = i+1;
end

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

  1. Запись пользовательской функции чтения, считывающей по одному массиву из MAT-файла.

  2. Настройте параметры функции хранилища данных для выполнения частичного чтения.

  3. Считывайте по одному массиву из MAT-файла.

Создайте пользовательскую функцию, считывающую по одному массиву из MAT-файла. Функция должна иметь подпись, как описано в @ReadFcn аргумент FileDatastore. Сохраните этот файл в рабочей папке или в папке, расположенной по пути MATLAB. В этом примере настраиваемая функция load_variable включен здесь.

type load_variable.m
function [data,variables,done] = load_variable(filename,variables)
    
    % If variable list is empty, 
    % create list of variables from the file
    if isempty(variables) 
        variables = who('-file', filename);
    end
    
    % Load a variable from the list of variables
    data = load(filename, variables{1});
    
    % Remove the newly-read variable from the list
    variables(1) = []; 
    
    % Move on to the next file if this file is done reading.
    done = isempty(variables); 
    
end

Создание и настройка FileDatastore содержа accidents.mat. Укажите параметры хранилища данных для использования 'partialfile' в качестве режима чтения и load_variable в качестве пользовательской функции чтения.

fds = fileDatastore('accidents.mat','ReadMode','partialfile','ReadFcn',@load_variable);

Считывайте первые три переменные из файла с помощью хранилища данных. Файл accidents.mat содержит девять переменных и каждый вызов read возвращает одну переменную. Поэтому, чтобы получить первые три переменные, вызовите функцию считывания три раза.

data = read(fds)
data = struct with fields:
    datasources: {3x1 cell}

data = read(fds)
data = struct with fields:
    hwycols: 17

data = read(fds)
data = struct with fields:
    hwydata: [51x17 double]

Обратите внимание, что образец файла accidents.mat мал и умещается в памяти, но можно ожидать аналогичных результатов для больших MAT-файлов, которые не умещаются в памяти.

Совет

  • Для использования subset и shuffle функции на FileDatastore объект, необходимо установить 'ReadMode' кому 'file'.

Представлен в R2016a