partition
데이터저장소 파티셔닝
구문
설명
예제
데이터저장소를 특정 파트 개수로 파티셔닝
대규모 파일 모음을 저장할 데이터저장소를 만듭니다. 이 예제에서는 샘플 파일 airlinesmall.csv
의 복사본 10개를 사용합니다. 테이블 형식 데이터의 누락된 필드를 처리하기 위해 이름-값 쌍 TreatAsMissing
과 MissingValue
를 지정합니다.
files = repmat({'airlinesmall.csv'},1,10); ds = tabularTextDatastore(files,... 'TreatAsMissing','NA','MissingValue',0);
데이터저장소를 3개의 파티션으로 분할하고 첫 번째 파티션을 반환합니다. partition
함수는 데이터저장소 ds
에 들어 있는 데이터 중에서 약 삼분의 일 분량에 해당하는 첫 번째 부분을 반환합니다.
subds = partition(ds,3,1)
subds = TabularTextDatastore with properties: Files: { ' ...\ExampleManager\nhossain.Bdoc.Feb13\matlab-ex96137387\airlinesmall.csv'; ' ...\ExampleManager\nhossain.Bdoc.Feb13\matlab-ex96137387\airlinesmall.csv'; ' ...\ExampleManager\nhossain.Bdoc.Feb13\matlab-ex96137387\airlinesmall.csv' ... and 1 more } Folders: { ' ...\Documents\MATLAB\ExampleManager\nhossain.Bdoc.Feb13\matlab-ex96137387' } FileEncoding: 'UTF-8' AlternateFileSystemRoots: {} VariableNamingRule: 'modify' ReadVariableNames: true VariableNames: {'Year', 'Month', 'DayofMonth' ... and 26 more} DatetimeLocale: en_US Text Format Properties: NumHeaderLines: 0 Delimiter: ',' RowDelimiter: '\r\n' TreatAsMissing: 'NA' MissingValue: 0 Advanced Text Format Properties: TextscanFormats: {'%f', '%f', '%f' ... and 26 more} TextType: 'char' ExponentCharacters: 'eEdD' CommentStyle: '' Whitespace: ' \b\t' MultipleDelimitersAsOne: false Properties that control the table returned by preview, read, readall: SelectedVariableNames: {'Year', 'Month', 'DayofMonth' ... and 26 more} SelectedFormats: {'%f', '%f', '%f' ... and 26 more} ReadSize: 20000 rows OutputType: 'table' RowTimes: [] Write-specific Properties: SupportedOutputFormats: ["txt" "csv" "dat" "asc" "xlsx" "xls" "parquet" "parq"] DefaultOutputFormat: "txt"
데이터저장소의 Files
속성은 데이터저장소에 들어 있는 파일의 목록을 포함합니다. 데이터저장소 ds
와 분할된 데이터저장소 subds
의 Files
속성에서 파일 개수를 확인합니다. 데이터저장소 ds
에는 10개의 파일이 들어 있고, 파티션 subds
에는 처음 4개의 파일이 들어 있습니다.
length(ds.Files)
ans = 10
length(subds.Files)
ans = 4
데이터저장소를 디폴트 파트 개수로 파티셔닝
샘플 파일 mapredout.mat
에서 데이터저장소를 만듭니다. 이 파일은 mapreduce
함수의 출력 파일입니다.
ds = datastore('mapredout.mat');
ds
의 디폴트 파티션 개수를 가져옵니다.
n = numpartitions(ds);
데이터저장소를 디폴트 파티션 개수로 파티셔닝하고 첫 번째 파티션에 대응하는 데이터저장소를 반환합니다.
subds = partition(ds,n,1);
subds
에서 데이터를 읽습니다.
while hasdata(subds) data = read(subds); end
파일을 기준으로 데이터저장소 파티셔닝
3개의 이미지 파일이 포함된 데이터저장소를 만듭니다.
ds = imageDatastore({'street1.jpg','peppers.png','corn.tif'})
ds = ImageDatastore with properties: Files: { ' ...\matlab\toolbox\matlab\demos\street1.jpg'; ' ...\matlab\toolbox\matlab\imagesci\peppers.png'; ' ...\matlab\toolbox\matlab\imagesci\corn.tif' } ReadSize: 1 Labels: {} ReadFcn: @readDatastoreImage
파일을 기준으로 데이터저장소를 파티셔닝하고 두 번째 파일에 대응하는 파트를 반환합니다.
subds = partition(ds,'Files',2)
subds = ImageDatastore with properties: Files: { ' ...\matlab\toolbox\matlab\imagesci\peppers.png' } ReadSize: 1 Labels: {} ReadFcn: @readDatastoreImage
subds
에는 하나의 파일이 포함됩니다.
병렬로 데이터 파티셔닝
샘플 파일 mapredout.mat
에서 데이터저장소를 만듭니다. 이 파일은 mapreduce
함수의 출력 파일입니다.
ds = datastore('mapredout.mat');
병렬 풀의 3개의 워커에 대한 데이터저장소를 3개의 파트로 파티셔닝합니다.
numWorkers = 3; p = parpool('local',numWorkers); n = numpartitions(ds,p); parfor ii=1:n subds = partition(ds,n,ii); while hasdata(subds) data = read(subds); end end
데이터 세분성 비교
성기게 세분한 파티션을 정교하게 세분한 서브셋과 비교합니다.
비디오 파일 xylophone.mp4
에서 모든 프레임을 읽어 들이고 반복을 수행할 ArrayDatastore
객체를 만듭니다. 결과로 생성되는 객체에는 141개의 프레임이 있습니다.
v = VideoReader("xylophone.mp4"); allFrames = read(v); arrds = arrayDatastore(allFrames,IterationDimension=4,OutputType="cell",ReadSize=4);
인접한 프레임들의 특정 집합을 추출하기 위해 arrds
로부터 4개의 성기게 세분한 파티션을 만듭니다. 두 번째 파티션을 추출합니다. 이 파티션에는 35개의 프레임이 있습니다.
partds = partition(arrds,4,2); imshow(imtile(partds.readall()))
정교하게 세분한 서브셋을 사용하여 arrds
로부터 지정된 인덱스에 있는 6개의 서로 인접하지 않은 프레임을 추출합니다.
subds = subset(arrds,[67 79 82 69 89 33]); imshow(imtile(subds.readall()))
입력 인수
ds
— 입력 데이터저장소
데이터저장소
입력 데이터저장소입니다. datastore
함수를 사용하여 데이터에서 datastore 객체를 만들 수 있습니다.
n
— 파티션 개수
양의 정수
파티션 개수로, 양의 정수로 지정됩니다.
partition
함수에 지정한 파티션 개수가 데이터저장소에 있는 파일 개수의 약수가 아닐 경우, partition
함수는 나머지 각 관측값을 기존 파티션에 첫 번째 파티션부터 추가합니다.
남은 관측값이 포함된 기존 파티션의 개수는 데이터저장소에 있는 파일 개수를 파티션 개수로 나누어서 얻는 나머지와 같습니다. 예를 들어, 3개 파티션으로 나누려는 datastore 객체에 23개 파일이 있는 경우 partition
이 생성하는 처음 두 개 파티션은 8개의 파일을 포함하고 마지막 파티션은 7개 파일을 포함합니다.
예: 3
데이터형: double
index
— 인덱스
양의 정수
인덱스로, 양의 정수로 지정됩니다.
예: 1
데이터형: double
filename
— 파일 이름
문자형 벡터 | string형 스칼라
파일 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.
filename
의 값은 데이터저장소의 Files
속성에 포함된 파일 이름과 정확하게 일치해야 합니다. 파일 이름이 정확하게 일치하는지 확인하려면 ds.Files{N}
을 사용하여 filename
을 지정하십시오. 여기서 N
은 Files
속성에 있는 파일의 인덱스입니다. 예를 들어, ds.Files{3}
은 데이터저장소 ds
의 세 번째 파일을 지정합니다.
예: ds.Files{3}
예: 'file1.csv'
예: '../dir/data/file1.csv'
예: 'hdfs://myserver:7867/data/file1.txt'
데이터형: char
출력 인수
subds
— 출력 데이터저장소
데이터저장소
출력 데이터저장소입니다. 출력 데이터저장소는 입력 데이터저장소 ds
와 형식이 같습니다.
확장 기능
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
스레드 기반 환경에서는 다음과 같은 데이터저장소에만
partition
함수를 사용할 수 있습니다.ImageDatastore
객체ImageDatastore
객체로부터combine
또는transform
을 사용하여 생성한CombinedDatastore
,SequentialDatastore
또는TransformedDatastore
객체
Parallel Computing Toolbox™가 있는 경우
partition
함수를 다른 데이터저장소에도 사용할 수 있습니다. 이렇게 하려면backgroundPool
또는ThreadPool
을 사용하는 대신 프로세스를 지원하는 병렬 풀을 사용하는 함수를 실행하십시오(ProcessPool
또는ClusterPool
사용).
자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
버전 내역
R2015a에 개발됨
참고 항목
datastore
| numpartitions
| subset
도움말 항목
- Partition a Datastore in Parallel (Parallel Computing Toolbox)
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)