【问题标题】:PySpark and Raster (GeoTiff) dataPySpark 和栅格 (GeoTiff) 数据
【发布时间】:2016-11-17 17:21:56
【问题描述】:

我正在尝试使用 Spark (PySpark) 来对存储在多波段 GeoTiff 中的数据进行分析。我还是个 Spark 新手。


设置

geotiff 本身足够小,可以在纯 python 中运行——特别是我正在使用 gdal 来读取数据。然后我创建数据框并进行分析。

但是分析需要一段时间。而且,我将经常性地分析数百个 geotiff - 进入 PySpark。


问题

我编写的代码允许我在本地伪集群上运行分析。但是,由于工作节点无法在本地读取存储在主节点上的数据,因此使用适当的集群会失败。

HDFS 应该来拯救,但是 sc.textFile(..) 返回的原始未处理的 geotiff 内容不是很有用。

我可以预处理数据以将 geotiff 转换为 csv,但额外的开销可能会使其不值得。

我希望找到的两个解决方案是

  • spark 方法,我们称之为sc.rasterFile(...),它将geotiff 读入spark 数据帧或rdd
  • 从纯 python 方法访问 hdfs 的能力。有点像~

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


问题

  1. 我认为上述两种解决方案都不可能是正确的吗?
  2. 是否有其他工具/方法/api 用于在 Spark 中处理 tiff?

谢谢!

【问题讨论】:

    标签: apache-spark hdfs pyspark gdal geotiff


    【解决方案1】:

    如果您想读取和处理整个文件,最简单的方法是结合 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)读取,但这些方法不会考虑数据局部性,并且可能导致性能欠佳。

    【讨论】:

      猜你喜欢
      • 2022-10-15
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      相关资源
      最近更新 更多