matlab.io.datastore. Класс HadoopFileBased

Пакет: matlab.io.datastore

Добавьте поддержку файла Hadoop datastore

Описание

matlab.io.datastore. HadoopFileBased является абстрактным классом mixin, который добавляет поддержку Hadoop® вашему пользовательскому datastore.

Чтобы использовать этот класс mixin, необходимо наследоваться классу matlab.io.datastore.HadoopFileBased в дополнение к наследованию от базового класса matlab.io.Datastore. Введите следующий синтаксис как первую строку вашего файла определения класса:

classdef MyDatastore < matlab.io.Datastore & ...
                             matlab.io.datastore.HadoopFileBased 
    ...
end

Чтобы добавить поддержку Hadoop наряду с поддержкой параллельной обработки, используйте эти строки в своем файле определения класса:

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

Чтобы добавить поддержку Hadoop к вашему пользовательскому datastore, вы должны:

Для получения дополнительной информации и шаги, чтобы создать ваш пользовательский datastore с поддержкой Hadoop, смотрите, Разрабатывают Пользовательский Datastore.

Методы

matlab.io.datastore. HadoopFileBased. getLocation Местоположение файлов в Hadoop
matlab.io.datastore. HadoopFileBased. initializeDatastore Инициализируйте datastore с информацией от Hadoop
matlab.io.datastore. HadoopFileBased. isfullfile Проверьте, читает ли datastore полные файлы

Атрибуты

Sealedложь

Для получения информации об атрибутах класса см. Атрибуты класса.

Примеры

свернуть все

Реализуйте datastore с параллельной обработкой и поддержкой Hadoop и используйте, это, чтобы принести ваши данные с сервера Hadoop в MATLAB®.Then использует tall и функции gather на этом данные.

Создайте новый файл определения класса .m, который содержит код, реализующий ваш пользовательский datastore. Необходимо сохранить этот файл в рабочей папке или в папке, которая находится на пути MATLAB. Имя файла .m должно совпасть с именем вашей функции конструктора Object. Например, если вы хотите, чтобы ваша функция конструктора имела имя MyDatastoreHadoop, затем именем файла скрипта должен быть MyDatastoreHadoop.m m. Файл определения класса .m должен содержать эти шаги:

  • Шаг 1: Наследуйтесь классам datastore.

  • Шаг 2: Задайте конструктора и требуемые методы.

  • Шаг 3: Задайте свою пользовательскую функцию чтения файла.

Этот код показывает три шага в демонстрационной реализации пользовательского datastore, который может считать двоичные файлы из сервера Hadoop.

%% STEP 1: INHERIT FROM DATASTORE CLASSES
classdef MyDatastoreHadoop < matlab.io.Datastore & ...
        matlab.io.datastore.Partitionable & ...
        matlab.io.datastore.HadoopFileBased
    
    properties (Access = private)
        CurrentFileIndex double
        FileSet matlab.io.datastore.DsFileSet
    end

         
%% STEP 2: DEFINE THE CONSTRUCTOR AND THE REQUIRED METHODS
    methods
        % Define your datastore constructor
        function myds = MyDatastoreHadoop(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
        
        % Define the hasdata method
        function tf = hasdata(myds)
            % Return true if more data is available
            tf = hasfile(myds.FileSet);
        end
        
        % Define the read method
        function [data,info] = read(myds)
            % Read data and information about the extracted data
            % See also: MyFileReader()
            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
        
        % Define the reset method
        function reset(myds)
            % Reset to the start of the data
            reset(myds.FileSet);
            myds.CurrentFileIndex = 1;
        end
        
        
        % Define the partition method
        function subds = partition(myds,n,ii)
            subds = copy(myds);
            subds.FileSet = partition(myds.FileSet,n,ii);
            reset(subds);
        end
    end      

     
    methods (Hidden = true)   

        % Define the progress method
        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
 
        % Define the initializeDatastore method
        function initializeDatastore(myds,hadoopInfo)
            import matlab.io.datastore.DsFileSet;
            myds.FileSet = DsFileSet(hadoopInfo,...
                'FileSplitSize',myds.FileSet.FileSplitSize,...
                'IncludeSubfolders',true, ...
                'FileExtensions','.bin');
            reset(myds);
        end
        
        % Define the getLocation method
        function loc = getLocation(myds)
            loc = myds.FileSet;
        end
        
        % Define the isfullfile method
        function tf = isfullfile(~)
            tf = isequal(myds.FileSet.FileSplitSize,'file'); 
        end

    end
        
    methods (Access = protected)
        % If you use the  FileSet property in the datastore,
        % 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
        
        % Define the maxpartitions method
        function n = maxpartitions(myds)
            n = maxpartitions(myds.FileSet);
        end
    end
end

%% STEP 3: IMPLEMENT YOUR CUSTOM FILE READING FUNCTION
function data = MyFileReader(fileInfoTbl)
% create a reader object using 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

Этот шаг завершает реализацию вашего пользовательского datastore.

Затем, создайте объект datastore использование вашего пользовательского конструктора datastore. Если ваши данные расположены в hdfs:///path_to_files, то можно использовать этот код.

setenv('HADOOP_HOME','/path/to/hadoop/install');
ds = MyDatastoreHadoop('hdfs:///path_to_files');

Чтобы использовать массивы tall и функцию gather на Apache Spark™ с параллельной кластерной конфигурацией, установите mapreducer и присоедините MyDatastoreHadoop.m к кластеру.

mr = mapreducer(cluster);
mr.Cluster.AttachedFiles = 'MyDatastoreHadoop.m';

Создание длинного массива от datastore.

t = tall(ds);

Соберите главу длинного массива.

 hd = gather(head(t));

Введенный в R2017b

Была ли эта тема полезной?