www.gusucode.com > bigdata 工具箱 matlab源码程序 > bigdata/@tall/construct.m
function [pa,ad] = construct(varargin) %CONSTRUCT Create a partitioned array and adaptor from the inputs % % [PA,AD] = CONSTRUCT(DS) creates a partitioned array PA and adaptor AD % given a datastore input DS. If the input datastore is tabular then the % adaptor will be a table adaptor, otherwise it will be an array adaptor. % % [PA,AD] = CONSTRUCT(X) creates a partitioned array PA and adaptor AD % from an in-memory array X. % % [PA,AD] = CONSTRUCT(TX) creates a partitioned array PA and adaptor AD % from an existing tall array TX. % % [PA,AD] = CONSTRUCT(PA,AD) creates a partitioned array PA and adaptor AD % from an existing partitioned array and adaptor pair. % Copyright 2016 The MathWorks, Inc. % This prevents this frame and anything below it being added to the gather % error stack. stack = createInvokeStack(); markerFrame = matlab.bigdata.internal.InternalStackFrame(stack); %#ok<NASGU> try narginchk(0,2); % tall() returns a 0x0 tall double array if nargin==0 [pa,ad] = iCreateFromLocal([]); return end % For two inputs, they must be a partitioned array, adaptor pair if nargin>1 pa = varargin{1}; ad = varargin{2}; if ~isa(pa, 'matlab.bigdata.internal.PartitionedArray') ... || ~isa(ad, 'matlab.bigdata.internal.adaptors.AbstractAdaptor') % This will always issue the too many input arguments error. We % issue this error here because two input arguments is not a % public syntax. narginchk(0,1); end return; end % For the single input case we need to distinguish between: % 1. a datastore (tabular or otherwise) % 2. an existing tall array % 3. some in-memory data in = varargin{1}; if isa(in, 'matlab.io.datastore.Datastore') % Create from datastore. Tabular datastores and TallDatastore need a % special adaptor as they both can return strong types. % Other datastores are assume to return cell arrays. pa = matlab.bigdata.internal.lazyeval.LazyPartitionedArray.createFromDatastore(in); if matlab.bigdata.internal.util.isTabularDatastore(in) ... || isa(in, 'matlab.io.datastore.TallDatastore') ad = matlab.bigdata.internal.adaptors.getAdaptor(preview(in)); else ad = matlab.bigdata.internal.adaptors.GenericAdaptor(); end elseif istall(in) % Copy from an existing tall array ad = in.Adaptor; pa = in.ValueImpl; elseif isa(in, 'matlab.bigdata.internal.PartitionedArray') % We got a partitioned array with no adaptor. Use the generic one. pa = in; ad = matlab.bigdata.internal.adaptors.GenericAdaptor(); else % Treat as in-memory data. [pa,ad] = iCreateFromLocal(in); end catch E matlab.bigdata.BigDataException.hThrowAsCallerWithSubmissionStack(E, stack(1)); end end % construct function [pa,ad] = iCreateFromLocal(data) % Create a partitioned array and adaptor for some in-memory data ad = matlab.bigdata.internal.adaptors.getAdaptor(data); ad = setKnownSize(ad, size(data)); pa = matlab.bigdata.internal.lazyeval.LazyPartitionedArray.createFromConstant(data); end % iCreateFromLocal