2016-06-06 2 views
0

스파크 및 천둥을 통해로드 된 tif 이미지의 처음 100 프레임 만 수정하고 싶습니다.부품을 rdd에서 어떻게 변경합니까

첫 번째 100 프레임에 백분위 수 이미지를 할당하려고합니다.

data = td.images.fromtif(path,'tif',None,None,False,1,10,None,sc,None).cache() 

downSampledImage = data.subsample(2) 

percentile_image = np.int16(np.percentile(downSampledImage[0:99, :, :], 40, 0)) 

지도 기능을 어떻게 사용할 수 있는지 알 수 없었습니다.

답변

0

좋아요, 저는 RDD의 이미지에 익숙하지 않습니다. 그러나 RDD에 대한 몇 가지 개념적인 사항을 설명하여 문제를 해결하는 방법을 이해하는 데 도움이 될 수 있습니다.

  1. RDD는 정렬되지 않은 경우 고유 한 순서가 없습니다. 병렬화 된 분산 데이터 구조에 무언가를 넣으면 '첫 번째'100 개의 이미지 또는 '마지막'이미지가 없습니다. 예, data.first()으로 전화 할 수는 있지만 실제로는 첫 번째 파티션으로 이동하여 찾은 첫 번째 행을 가져와 드라이버로 보냅니다. first은 오해의 소지가 있습니다. 그것은 random과 같습니다.

  2. RDD에서 작업을 수행 할 때 map을 사용합니다. map이 모든 단일 행에 적용됩니다. 이제 if-else 문을 사용하여 백분위 수와 관련된 변환이 특정 100 행 집합에만 적용되는지 확인할 수 있습니다. np.int16 : (행) (조건) 충족하는 경우 그래서 당신은

    을 할 수있는 (np.percentile (downSampledImage [: : 0:99,,, 0) 40)

을하지만 첫 번째 100 개의 행이 조건을 충족시켜 관련성이있는 것으로 플래그를 지정할 수 있어야합니다.

+0

특정 플래그가 없다는 문제는 처음 100 개 프레임에 불과합니다. 나는 어리석은 짓을했다. 나는 샘플 된 이미지를 처음 100 개로 나누었고, 나머지는 내가 병합 한 후 나머지 부분을 수정 한 후에 수정했다. 그것은 다른 방법이어야합니다. –

+0

흠. 첫 번째 100 개 프레임 (예 : 100 개 이미지 세트가 많음)이 있습니까? 아니면 전체 RDD에 하나의 이미지 만 있습니다. 처음 100 개 프레임 만 있으면됩니까? –

+0

왜 이런 식으로 작동하지 않는지 궁금합니다. downSampledImage [0 : 100, :, :] map (lambda x : percentile_image) downSampledImage에 결과를 매핑하고 저장하지 않는 이유가 무엇입니까? 변수에 저장하면 100 프레임 밖에 쓸모가 없습니다. 맵 작업이 사라지고 변수에 저장되지 않는 이유는 이상합니다. –

관련 문제