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