2016-07-14 113 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),但这些方法不会考虑数据的局部性,并且可能导致性能不理想。