Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Desarrollar almacén de datos personalizado

En este ejemplo se muestra cómo implementar un almacén de datos personalizado para la información basada en archivos. Utilice este marco de trabajo solo al escribir su propia interfaz de almacén de datos personalizada. De lo contrario, para los formatos de archivo estándar, como imágenes u hojas de cálculo, utilice un almacén de datos existente.MATLAB® Para obtener más información, consulte.Introducción a DataStore

Visión general

Para compilar la interfaz de almacén de datos personalizada, utilice las clases y objetos de almacén de datos personalizados. A continuación, utilice el almacén de datos personalizado para incorporar los datos y aprovechar las capacidades de macrodatos como, por ejemplo, MapReduce y.MATLABMATLABtallHadoop®

Diseñar el almacén de datos personalizado implica heredar de una o más clases abstractas e implementar los métodos necesarios. Las clases y métodos específicos que necesita dependen de sus necesidades de procesamiento.

Necesidades de procesamiento

Clases

Almacén de datos para procesamiento en serie enMATLAB

matlab.io.Datastore

VerImplemente datastore para procesamiento en serie

Datastore con soporte para yParallel Computing Toolbox™ MATLABParallel Server™

Ymatlab.io.Datastorematlab.io.datastore.Partitionable

VerAgregar soporte para procesamiento en paralelo

Datastore con soporte paraHadoop

Ymatlab.io.Datastorematlab.io.datastore.HadoopLocationBased

VerAgregue soporte para Hadoop

Almacén de datos con soporte para barajar muestras en un almacén de datos en orden aleatorio

Ymatlab.io.Datastorematlab.io.datastore.Shuffleable

VerAñadir soporte para shuffling

Empiece implementando el almacén de datos para el procesamiento en serie y, a continuación, agregue compatibilidad para el procesamiento en paralelo y el sufling.Hadoop

Implemente datastore para procesamiento en serie

Para implementar un almacén de datos personalizado denominado, cree un script.MyDatastoreMyDatastore.m El script debe estar en la ruta de acceso y debe contener código que herede de la clase adecuada y defina los métodos necesarios.MATLAB El código para crear un almacén de datos para el procesamiento en serie debe:MATLAB

  • Heredar de la clase base.matlab.io.Datastore

  • Defina estos métodos:,, y.hasdatareadresetprogress

  • Defina propiedades y métodos adicionales en función de sus necesidades de procesamiento y análisis de datos.

Para una implementación de ejemplo, siga estos pasos.

PasosImplementación

Heredar de la clase base.Datastore

classdef MyDatastore < matlab.io.Datastore          properties (Access = private)         CurrentFileIndex double         FileSet matlab.io.datastore.DsFileSet     end

Agregue esta propiedad para crear un almacén de datos en un equipo que funcione sin problemas en otro equipo o clúster que posiblemente tenga un sistema de archivos o un sistema operativo diferente.

Agregue métodos para obtener y establecer esta propiedad en la sección de métodos.

    % Property to support saving, loading, and processing of     % datastore on different file system machines or clusters.      % In addition, define the methods get.AlternateFileSystemRoots()     % and set.AlternateFileSystemRoots() in the methods section.      properties(Dependent)         AlternateFileSystemRoots     end

Implemente la función que crea el almacén de datos personalizado.MyDatastore

    methods % begin methods section                  function myds = MyDatastore(location,altRoots)             myds.FileSet = matlab.io.datastore.DsFileSet(location,...                 'FileExtensions','.bin', ...                 'FileSplitSize',8*1024);             myds.CurrentFileIndex = 1;                          if nargin == 2                  myds.AlternateFileSystemRoots = altRoots;             end              reset(myds);         end 

Implemente el método.hasdata

        function tf = hasdata(myds)             % Return true if more data is available.             tf = hasfile(myds.FileSet);         end 

Implemente el método.read

Este método utiliza, que es una función que debe crear para leer su formato de archivo propietario.MyFileReader

Ver.Crear función para leer su formato de archivo propietario

        function [data,info] = read(myds)             % Read data and information about the extracted data.             if ~hasdata(myds)                 error(sprintf(['No more data to read.\nUse the reset ',...                     'method to reset the datastore to the start of ' ,...                     'the data. \nBefore calling the read method, ',...                     'check if data is available to read ',...                     'by using the hasdata method.']))                              end                          fileInfoTbl = nextfile(myds.FileSet);             data = MyFileReader(fileInfoTbl);             info.Size = size(data);             info.FileName = fileInfoTbl.FileName;             info.Offset = fileInfoTbl.Offset;                          % Update CurrentFileIndex for tracking progress             if fileInfoTbl.Offset + fileInfoTbl.SplitSize >= ...                     fileInfoTbl.FileSize                 myds.CurrentFileIndex = myds.CurrentFileIndex + 1 ;             end                                   end

Implemente el método.reset

        function reset(myds)             % Reset to the start of the data.             reset(myds.FileSet);             myds.CurrentFileIndex = 1;         end 

Defina los métodos para obtener y establecer la propiedad.AlternateFileSystemRoots

Debe restablecer el almacén de datos en el método.set

        % Before defining these methods, add the AlternateFileSystemRoots          % property in the properties section               % Getter for AlternateFileSystemRoots property         function altRoots = get.AlternateFileSystemRoots(myds)             altRoots = myds.FileSet.AlternateFileSystemRoots;         end          % Setter for AlternateFileSystemRoots property         function set.AlternateFileSystemRoots(myds,altRoots)             try               % The DsFileSet object manages the AlternateFileSystemRoots               % for your datastore               myds.FileSet.AlternateFileSystemRoots = altRoots;                % Reset the datastore               reset(myds);               catch ME               throw(ME);             end         end              end

Implemente el método.progress

    methods (Hidden = true)         function frac = progress(myds)             % Determine percentage of data read from datastore             if hasdata(myds)                 frac = (myds.CurrentFileIndex-1)/...                              myds.FileSet.NumFiles;              else                frac = 1;               end          end     end 

Implemente el método cuando utilice el objeto como una propiedad en el almacén de datos.copyElementDsFileSet

    methods (Access = protected)         % If you use the DsFileSet object as a property, then          % you must define the copyElement method. The copyElement         % method allows methods such as readall and preview to          % remain stateless         function dscopy = copyElement(ds)             dscopy = copyElement@matlab.mixin.Copyable(ds);             dscopy.FileSet = copy(ds.FileSet);         end     end 

Termina la sección.classdef

end

Crear función para leer su formato de archivo propietario

La implementación del método de su almacén de datos personalizado utiliza una función llamada.readMyFileReader Debe crear esta función para leer los datos personalizados o propietarios. Compile esta función mediante el objeto y sus métodos.DsFileReader Por ejemplo, cree una función que lea archivos binarios.

function data = MyFileReader(fileInfoTbl) % create a reader object using the FileName reader = matlab.io.datastore.DsFileReader(fileInfoTbl.FileName);  % seek to the offset seek(reader,fileInfoTbl.Offset,'Origin','start-of-file');  % read fileInfoTbl.SplitSize amount of data data = read(reader,fileInfoTbl.SplitSize); end

Agregar soporte para procesamiento en paralelo

Para agregar compatibilidad con el procesamiento en paralelo con yParallel Computing Toolbox MATLABParallel Server, actualice el código de implementación en:MyDatastore.m

Para una implementación de ejemplo, siga estos pasos.

PasosImplementación

Actualice la sección para heredar de la clase.classdefPartitionable

classdef MyDatastore < matlab.io.Datastore & ...                        matlab.io.datastore.Partitionable      .      .      .    

Agregue la definición para la sección.partitionmethods

 methods      .      .      .      function subds = partition(myds,n,ii)          subds = copy(myds);          subds.FileSet = partition(myds.FileSet,n,ii);          reset(subds);               end  end  

Agregue la definición para maxpartitions a la sección.methods

 methods (Access = protected)      function n = maxpartitions(myds)         n = maxpartitions(myds.FileSet);       end       end  

Final.classdef

end  

Agregue soporte para Hadoop

Para agregar compatibilidad, actualice el código de implementación en:HadoopMyDatastore.m

Para una implementación de ejemplo, siga estos pasos.

PasosImplementación

Actualice la sección para heredar de la clase.classdefHadoopLocationBased

classdef MyDatastore < matlab.io.Datastore & ...                        matlab.io.datastore.HadoopLocationBased       .      .      .    

Agregue la definición para getLocation, initializeDatastoreY isfullfile(opcional) a la sección.methods

 methods (Hidden = true)      .      .      .          function initializeDatastore(myds,hadoopInfo)         import matlab.io.datastore.DsFileSet;         myds.FileSet = DsFileSet(hadoopInfo,...              'FileSplitSize',myds.FileSet.FileSplitSize);         reset(myds);               end             function loc = getLocation(myds)         loc = myds.FileSet;               end             % isfullfile method is optional      function tf = isfullfile(myds)         tf = isequal(myds.FileSet.FileSplitSize,'file');                end     end  

Termina la sección.classdef

end

Añadir soporte para shuffling

Para agregar compatibilidad con el barajado, actualice el código de implementación en:MyDatastore.m

Para una implementación de ejemplo, siga estos pasos.

PasosImplementación

Actualice la sección para heredar de la clase.classdefShuffleable

classdef MyDatastore < matlab.io.Datastore & ...                       matlab.io.datastore.Shuffleable       .      .      .    

Agregue la definición para shuffle a la sección existente.methods

  methods          % previously defined methods         .         .         .              function dsNew = shuffle(ds)             % dsNew = shuffle(ds) shuffles the files and the             % corresponding labels in the datastore.                          % Create a copy of datastore             dsNew = copy(ds);             dsNew.Datastore = copy(ds.Datastore);             fds = dsNew.Datastore;                          % Shuffle files and corresponding labels             numObservations = dsNew.NumObservations;             idx = randperm(numObservations);             fds.Files = fds.Files(idx);             dsNew.Labels = dsNew.Labels(idx);         end    end   

Termina la sección.classdef

end

Validar almacén de datos personalizado

Después de seguir las instrucciones presentadas aquí, se completa el paso de implementación de su almacén de datos personalizado. Antes de utilizar este almacén de datos personalizado, califíque utilizando las directrices presentadas en.Directrices de prueba para datastores personalizados

Consulte también

| | | | |

Temas relacionados