GeoTiff 栅格数据转换为 Delta Lake / Parquet 格式?

问题描述 投票:0回答:2

我们的组织最近一直在使用 Databricks 进行 ETL 和数据集开发。然而,我发现栅格数据集的库/功能非常有限。周围有一些光栅/Spark 库,但它们还不是很成熟。例如 GeoTrellisRasterFramesApache Sedona

因此,我一直在探索在 Databricks 平台上高效处理栅格数据的替代方法,该平台利用 Spark/Delta 表/Parquet 文件。

我的一个想法是将栅格数据转储到简单的 x、y、值列并将它们加载为表。如果我的其他数据集具有相同的分辨率(我将对它们进行预处理,以便它们具有相同的分辨率),那么我应该能够执行简单的 SQL 查询以进行屏蔽/加法/减法以及更复杂的用户定义函数。

第一步,我认为是将栅格转储为 CSV 格式的点,然后我可以加载到 Delta 表。但是在我的 Databricks 集群(128GB 内存,16 个核心)上运行 12 小时后,3GB 栅格仍然没有完成(我正在使用下面的 gdal2xyz 函数)。

有人有更快的方法将栅格转储为 CSV 吗?或者更好,直接转储为镶木地板格式。

python gdal2xyz.py -band 1 -skipnodata "AR_FLRF_UD_Q1500_RD_02.tif" "AR_FLRF_UD_Q1500_RD_02.csv"

也许我可以平铺栅格,使用并行处理将每个 CSV 转储到文件,然后将 CSV 文件绑定在一起,但这似乎有点费力。

gis databricks raster gdal terra
2个回答
2
投票

您可以使用 Sedona 轻松地将 GeoTiff 加载到 DataFrame 并将数据帧保存为 Parquet 格式。请参阅此处:https://sedona.apache.org/latest-snapshot/api/sql/Raster-loader/


2
投票

GDAL 从 3.5 版本开始就有 parquet 驱动程序。因此,至少使用该版本,您应该能够使用“terra”将栅格数据写入镶木地板,如下所示

library(terra)
x <- vect(system.file("ex/lux.shp", package="terra"))
writeVector(x, "file.pqt", filetype="Parquet")

您可以通过

terra::gdal()
查看“terra”使用的版本。

但是,这不包含在 Windows 的 CRAN 构建中。

© www.soinside.com 2019 - 2024. All rights reserved.