2016-07-14 6 views
2

멀티 밴드 GeoTiff에 저장된 데이터를 분석하기 위해 Spark (PySpark)를 사용하려고합니다. 나는 아직도 스파크 초보자 다.PySpark 및 Raster (GeoTiff) 데이터


설정 :

geotiffs 자체는 순수 파이썬에서 실행할 수있을만큼 작은 - 특별히 내가 데이터를 읽을 GDAL을 사용하고 있습니다. 그런 다음 데이터 프레임을 만들고 분석을 수행합니다.

그러나 분석에는 다소 시간이 걸립니다. 그리고 반복적으로 분석 할 수있는 수백 개의 지리 정보가 있습니다. PySpark를 입력하십시오.


문제는 :

나는 나 로컬 의사 클러스터 분석을 실행할 수있는 코드를 작성했습니다. 그러나 마스터 노드에 저장된 데이터는 작업자 노드에서 로컬로 읽을 수 없으므로 적절한 클러스터에서 실패합니다.

HDFS가 구조에 도달해야하지만 sc.textFile(..)은 매우 유용하지 않은 지오 티프의 원시 처리되지 않은 콘텐츠를 반환합니다.

geotiffs를 csv 's로 바꾸기 위해 데이터를 사전 처리 할 수는 있지만 추가적인 오버 헤드로 인해 가치가 떨어질 수 있습니다. 내가 찾을 희망했다

두 솔루션은 불꽃 방법

  • 했다, 스파크 데이터 프레임 또는 RDD
  • 로에서 HDFS에 액세스 할 수있는 기능을 geotiff을 읽을 것이다, 그것을 sc.rasterFile(...)를 호출 할 수 있습니다 순수한 파이썬 방법. 같은 뭔가 ~

    gdal.Open("hdfs://...", gc.GA_ReadOnly)


질문 :

  1. 나는 위의 두 방법 모두 사용할 수 있다고 가정하는 수정 있습니까?
  2. 스파크에서 tiff로 작업하기위한 다른 도구/방법/API가 있습니까?

고마워요!

답변

0

당신이 읽고 싶은 프로세스 전체는 가장 간단한 방법은 binaryFilesio 모듈을 결합하는 것입니다 파일 경우

sc.rasterFile 없다하지만 일부가
  • : 남아있는 쿼리에 대해서는

    from io import BytesIO 
    
    (sc 
        .binaryFiles(path) 
        .values() 
        .map(BytesIO) 
        .map(some_function_which_expects_opened_binary_file)) 
    

    SparkContext.hadoopFile으로 Spark에서 사용할 수있는 Hipi에 의해 제공되는 이미지 처리 입력 형식.

  • Posix 호환 분산 파일 시스템 또는 심지어 HDFS (예 : hdfs3)에서 직접 읽을 수도 있지만 이러한 방법은 데이터 지역성을 고려하지 않으며 차선 성능을 초래할 수 있습니다.