2016-07-14 46 views
2

我正在嘗試使用Spark(PySpark)來對存儲在多波段GeoTiffs中的數據運行分析。我還是一個Spark新手。PySpark和柵格(GeoTiff)數據


設置

的geotiffs本身足夠小,在純Python運行 - 特別是我使用GDAL讀取數據。然後我創建數據框並進行分析。

但是分析需要一段時間。而且,經常性地,我將有數百個geotiffs進行分析 - 輸入PySpark。


問題

我寫的代碼,讓我來運行本地僞羣集上的分析。但是,由於存儲在主節點上的數據無法在工作節點本地讀取,因此它會因適當的羣集而失敗。

HDFS應該來拯救,但是sc.textFile(..)返回原始未處理的geotiff內容,這不是很有用。

我可以預處理數據以將geotiffs轉換爲csv,但額外的開銷可能使它不值得。

這兩種方案我希望能找到人

  • 的火花方法,讓我們把它叫做sc.rasterFile(...),這將讀取的GeoTIFF到火花數據幀或RDD
  • 從訪問HDFS的能力純python方法。喜歡的東西〜

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


問題

  1. 我是正確的假設,無論是上述解決方案是可行的?
  2. 在Spark中是否有其他工具/方法/ apis用於使用tiffs?

謝謝!

回答

0

如果你想讀取和處理整個文件的最簡單的方法是結合binaryFilesio模塊:

from io import BytesIO 

(sc 
    .binaryFiles(path) 
    .values() 
    .map(BytesIO) 
    .map(some_function_which_expects_opened_binary_file)) 

關於你的剩餘查詢:

  • 沒有sc.rasterFile但也有一些圖像處理輸入格式由Hipi提供,可在Spark中使用SparkContext.hadoopFile
  • 可以直接從Posix兼容的分佈式文件系統甚至HDFS中讀取(例如使用hdfs3),但這些方法不會考慮數據的局部性,並且可能導致性能不理想。