PySpark和栅格(GeoTiff)数据

3
我想使用Spark(PySpark)来分析存储在多波段GeoTiffs中的数据。我在Spark方面还是个新手。
设置:
GeoTiffs本身足够小,可以在纯Python中运行,具体来说,我使用gdal来读取数据。然后,我创建数据帧并进行分析。
问题:
我编写了代码,使我能够在本地伪集群上运行分析。但是,在真正的集群中失败,因为主节点上存储的数据无法在工作节点上本地读取。
HDFS应该会挽救局面,但是sc.textFile(...)返回地理图的原始未处理内容,这并不是很有用。
我可以预处理数据,将地理图转换为csv,但是额外的开销可能不值得。
我希望找到的两个解决方案是:
1.一个Spark方法,让我们称之为sc.rasterFile(...),它将读取Geotiff到Spark数据帧或rdd中
2.从纯Python方法访问hdfs的能力。类似于~
gdal.Open("hdfs://...", gc.GA_ReadOnly)
问题:
1.我是否正确地认为以上两种解决方案都不可行?
2.是否有其他用于在Spark中处理tiffs的工具/方法/API?
谢谢!
1个回答

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)读取,但这些方法不会考虑数据本地性,可能导致次优性能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接