gusucode.com > bigdata 工具箱 matlab源码程序 > bigdata/+matlab/+bigdata/+internal/+executor/DatastorePartitionStrategy.m

    %DatastorePartitionStrategy
% A partitioning strategy based on partitioning a datastore directly.
%
% This strategy allows the execution environment to decide the partitioning
% based on the provided datastore.
%

%   Copyright 2015-2016 The MathWorks, Inc.

classdef (Sealed) DatastorePartitionStrategy < matlab.bigdata.internal.executor.PartitionStrategy
    properties (SetAccess = immutable)
        % The datastore object associated with this strategy.
        Datastore;
        
        % A boolean property that is true if and only if the underlying
        % datastore is splittable.
        IsSplittable;
    end
    
    % Overrides of PartitionStrategy properties.
    properties (SetAccess = private)
        DesiredNumPartitions = [];
        
        IsNumPartitionsFixed = false;
        
        IsDatastorePartitioning = true;
        
        IsBroadcast = false;
        
        IsDataReplicated = false;
    end

    methods
        % The main constructor.
        function obj = DatastorePartitionStrategy(datastore)
            obj.Datastore = datastore;
            obj.IsSplittable = isa(obj.Datastore, 'matlab.io.datastore.SplittableDatastore');
            if obj.IsSplittable
                % The result of numpartitions can be 0 if there exists no
                % underlying data. We bound it because we need to have at
                % least 1 partition for type propagation to work correctly.
                obj.DesiredNumPartitions = max(numpartitions(obj.Datastore), 1);
            else
                obj.DesiredNumPartitions = 1;
            end
        end
        
        function partition = createPartition(obj, partitionIndex, numPartitions, hadoopSplit)
            import matlab.bigdata.internal.executor.DatastorePartition;
            import matlab.bigdata.internal.executor.HadoopDatastorePartition;
            import matlab.bigdata.internal.executor.NonSplittableDatastorePartition;
            if nargin < 3
                numPartitions = obj.DesiredNumPartitions;
            end
            if ~obj.IsSplittable
                assert(numPartitions == 1);
                partition = NonSplittableDatastorePartition(obj.Datastore);
            elseif nargin < 4
                partition = DatastorePartition(partitionIndex, numPartitions, obj.Datastore);
            else
                partition = HadoopDatastorePartition(partitionIndex, numPartitions, obj.Datastore, hadoopSplit);
            end
        end
    end
end