bob体育客户端下载平台的博客

基于马赛克的大规模地理空间处理

分享这篇文章

突破规模壁垒(讨论现有挑战)

在Databricks,我们高度专注于支持用户的数据现代化之旅。

越来越多的客户向我们寻求帮助,以简化和扩展他们的地理空间分析工作负载。有些人希望我们设计一个完全有主见的数据架构;其他人开发了自定义代码和依赖关系,他们不想从中剥离。客户通常需要从单节点到分布式处理的飞跃,以应对数据采集新方法或为数据饥渴的机器学习应用程序提供数据所带来的规模挑战。

在这种情况下,我们经常看到平台用户尝试使用现有的开源选项来处理大型地理空间数bob体育客户端下载据。bob下载地址这些选项通常有一个陡峭的学习曲线,这可能会带来挑战,除非客户已经熟悉了用于部署和使用的给定框架的最佳实践和模式。用户很难通过现有的地理空间数据工程方法实现所需的性能,许多人希望能够灵活地与空间库和合作伙伴的广泛生态系统合作。bob体育外网下载

虽然设计决策总是伴随着一个贸易空间,但我们在构建一个名为Mosaic的新地理空间库时,听取并学习了客户的意见。Mosaic的目的是减少缩放和扩展各种工作负载的摩擦,以及作为客户合作期间开发的最佳实践模式的存储库。

在其核心,马赛克是一个扩展Apache火花™框架,为快速、轻松地处理非常大的地理空间数据集而构建。马赛克提供:

  • 地理空间数据工程方法,独特地利用三角洲湖在Databricks上,同时保持与其他图书馆和合作伙伴使用的灵活性bob体育外网下载
  • 通过在核心Mosaic函数中实现Spark代码生成实现高性能
  • 许多OGC标准空间SQL (ST_)函数实现为Spark表达式,用于转换、聚合和连接空间数据集
  • 用于大规模执行空间连接的优化
  • 在常见的空间数据编码(如WKT、WKB和GeoJSON)之间轻松转换
  • 从Spark原生数据类型轻松生成新的几何图形,并转换为JTS拓扑套件(JTS)和环境系统研究所(Esri)几何图形类型
  • Scala、SQL和Python api之间的选择
马赛克的逻辑设计。Mosaic同时支持Esri和JTS api。Mosaic支持H3索引系统,并为Databricks notebook提供简单的KeplerGL实用程序。
图1:马赛克功能设计

拥抱生态系统

我们对Mosaic的想法是,让它一边适合Spark和Delta,另一边适合现有生态系统的其余部分。我们将Mosaic设想为一个库,它带来了将地理空间功能集成到能够从高度并行性中受益的系统中的专有技术。像Apache Sedona或GeoMesa这样的流行框架仍然可以与Mosaic一起使用,这使得它成为一个灵活而强大的选择,甚至可以作为现有体系结构的增强。

另一方面,设计时不需要额外的地理空间工具的系统可以使用Mosaic迁移到数据架构上,因此,由于支持多种语言和统一的api,以最小的努力利用了高可伸缩性和性能。额外的价值在于,由于Mosaic自然位于Lakehouse架构之上,它可以解锁AI/ML和地理空间数据平台的高级分析功能。bob体育客户端下载

Mosaic包含更广泛的生态系统,并增强第三方框架。马赛克实现功能,以支持您的湖屋从摄取到可视化的每个阶段。
图2:马赛克和地理空间生态系统

最后,CARTO、GeoServer、MapBox等解决方案仍然是您的体系结构中不可分割的一部分。Mosaic旨在为您的设计和体系结构带来性能和可伸缩性。可视化和交互式地图应该委托给更适合处理这种交互类型的解决方案。我们的目标不是重新发明轮子,而是解决我们在该领域发现的差距,成为马赛克中缺失的瓷砖。

使用经过验证的模式

马赛克是从一个库存活动中出现的,该活动捕获了我们为解决Databricks客户的问题而构建的所有有用的现场开发的地理空间模式。这个过程的输出表明,通过创建一个将这些模式打包并允许客户直接使用它们的框架,可以实现很大的价值。

您甚至可以说马赛克是我们在该领域中确定的最佳实践的马赛克。

我们为框架选择名称还有另一个原因。马赛克的基础是我们在这里讨论的技术博客与军械测量局和微软合作编写,其中我们选择使用底层分层空间索引系统作为网格来表示几何图形,使得将复杂多边形表示为栅格和局部矢量表示变得可行。

使用英国国家电网的马赛克示例。马赛克将原始几何图形分解为边界芯片和完全包含的索引。
图3:使用BNG的矢量几何表示的马赛克方法

此方法的激励用例最初由应用程序证明BNG,英国基于网格的空间索引系统,用于划分几何相交问题(例如多边形中点连接)。虽然我们对该技术的第一次应用为其预期的应用产生了非常好的结果和性能,但是为了推广到更广泛的问题集,实现需要进行重大的调整。

这就是为什么在马赛克我们选择替代H3空间指标体系取代BNG,未来有潜力基于客户需求信号建立其他指标。H3是一个将正六边形映射到整数id的全局层次索引系统。就其本质而言,六边形提供了许多优于其他形状的优点,例如保持精度,并允许我们利用固有的索引系统结构来计算近似距离。H3提供了一个足够丰富的API来复制马赛克方法,作为额外的奖励,它本机集成了KeplerGLDatabricks笔记本环境中开发的工作流程中渲染空间内容的一个巨大的使能器。

使用H3网格索引的马赛克示例。马赛克将原始几何图形分解为边界芯片和完全包含的索引。
图4:用H3表示矢量几何的镶嵌方法

马赛克设计适用于任何层次空间索引系统,形成完美的空间分区。我们这里所说的空间的完美划分有两个要求:

  1. 在给定分辨率下没有重叠指标
  2. 在给定分辨率下的完整指标集在观测空间上形成包络

如果满足这两个条件,我们可以计算伪栅格化方法,与传统的栅格化不同,该方法的操作是可逆的。Mosaic公开了一个API,允许多种索引策略:

  • 索引保持在几何图形旁边,作为一个附加列
  • 在卫星表中分离的索引
  • 通过几何切屑或马赛克的索引爆炸原来的表

每一种方法都可以在不同的情况下提供好处。我们认为,性能和易用性之间的最佳权衡是打破原有的表。虽然这增加了表中的行数,但该方法解决了行内倾斜问题,并最大限度地利用了Z-Order和Bloom Filters等技术。此外,由于在每一行中存储了更简单的几何图形,所有地理空间谓词将运行得更快,因为它们将操作简单的局部几何表示。

这篇博客的重点是利用Delta Lake索引策略的马赛克方法。Delta Lake在处理大容量大数据时提供了一些非常有用的功能,它可以帮助Spark工作负载实现峰值性能。z值是执行地理空间数据工程和构建地理空间信息系统的一个非常重要的三角洲特征。简单地说,Z排序以一种方式组织存储上的数据,使在提供查询时可以跳过的数据量最大化。

Delta使用Z-Order实现了一种高效的数据布局模式。Z-Order为地理空间工作负载提供了最佳性能。
图5:Z-Order和线性Order数据存储的比较

地理空间数据集有一个统一的特征:它们表示位于物理世界中的概念。通过应用适当的z排序策略,我们可以确保物理上配置的数据点也将在存储上配置。这在提供具有高局部性的查询时非常有利。许多地理空间查询旨在返回与有限的局部区域相关的数据或协同处理彼此接近的数据点,而不是相距很远的数据点。

这就是像H3这样的索引系统非常有用的地方。给定分辨率上的H3 id如果在现实世界中非常接近,则它们的索引值彼此接近。这使得H3 id成为与Delta Lake的z顺序一起使用的完美候选人。

使Geospatial on Databricks简单

如今,满足业务需求所需的数据处理数量正呈指数级增长。这样做的两个后果是显而易见的:1)数据不再适合放在一台机器上;2)组织正在实现基于关键云技术的现代数据堆栈。

Lakehouse架构和Spark和Delta等支持技术是现代数据堆栈的基础组件,极大地帮助解决数据世界中的这些新挑战。然而,当涉及到使用这些工具来运行具有高度复杂几何图形的大规模连接时,这对许多用户来说仍然是一项艰巨的任务。

Mosaic旨在简化Databricks中的地理空间处理,包括传统上由多个框架提供的概念,并且通常对最终用户隐藏,因此通常限制了用户完全控制系统的能力。其目标是提供一个模块化的系统,可以满足用户不断变化的需求,同时应用核心地理空间数据工程技术,作为后续处理、分析和可视化的基线。Mosaic支持使用JTS或Esri类型的几何图形的运行时表示。考虑到简单性,Mosaic为使用这两个几何包带来了统一的抽象,并为Spark中的Dataset api进行了优化设计。统一是非常重要的,因为在这两个包之间切换(两者都有各自的优点和缺点,更适合不同的用例)不应该是一项复杂的任务,也不应该影响构建查询的方式。

% python马赛克进口enable_mosaicspark.conf。“spark.databricks.mosaic.geometry.api”“JTS”dbutils enable_mosaic(火花)
                left_df.join (right_df,= (“h3_index”),如何=“内心”) .groupBy (关键) .count ()

图6:使用H3和JTS的马赛克查询

% python马赛克进口enable_mosaicspark.conf。“spark.databricks.mosaic.geometry.api”“独立”dbutils enable_mosaic(火花)
                left_df.join (right_df,= (“h3_index”),如何=“内心”) .groupBy (关键) .count ()

图7:使用H3和Esri的马赛克查询

上面的方法旨在允许在不同任务的JTS或Esri几何包之间轻松切换,但不能在同一个笔记本中混合使用。我们强烈建议您在单个笔记本和/或管道的单个步骤中使用单个Mosaic上下文。

通过与Spark和Delta集成,将索引模式与易于使用的api结合在一起,用于地理相关的查询和转换,从而释放出大型系统的全部潜力。

pythondfdf.withColumn (“指数”,mosaic_explode(坳(“形状”))df.write.format(“δ”).save(位置)sql创建表格table_name使用δ位置的位置
              优化table_nameZORDER通过(index.h3)

图8:马赛克爆炸与Delta z顺序组合

这种伪栅格化方法允许我们通过简单地引入或排除WHERE子句,在具有精度公差的高速连接与高精度连接之间快速切换。

% python#栅格化查询#更快但不太精确left_df.join (right_df,= (“index.h3”),如何=“内心”) .groupBy (关键) .count ()

图9:仅使用索引的马赛克查询

% python#详细查询#更慢但更精确left_df.join (right_df,= (“index.h3”),如何=“内心”)。(坳(“is_core”) | |st_contains(坳(“芯片”)、坳(“点”))) .groupBy (关键) .count ()

图10:使用芯片详细信息的马赛克查询

我们为什么选择这种方法?简单有很多方面,其中一个经常被忽视的是代码的显式性质。显式几乎总是比隐式好。使用WHERE子句来决定行为,而不是使用配置值,可以使代码更具交流性,并且更容易解释代码。此外,在跨工作空间甚至平台复制代码时,代码行为保持一致和可重复。bob体育客户端下载

最后,如果您现有的解决方案利用了H3功能,并且您不希望重构数据,那么Mosaic仍然可以通过简化地理空间管道来提供巨大的价值。Mosaic带有本地支持的H3函数子集。

% pythondf.withColumn (“指标”, polyfill(坳(“形状”))

图11:形状填充的马赛克查询

% pythondf.withColumn (“指数”, point_index_geom(坳(“点”))

图12:点索引的马赛克查询

加快创新步伐

我们设计Mosaic的主要动机是在更广泛的生态系统中实现简单和集成;然而,如果不能保证性能和计算能力,这种灵活性就没有什么意义。我们评估了马赛克的2个主要操作:点在多边形连接和多边形交叉连接。此外,我们还评估了索引阶段的预期性能。对于这两个用例,我们都预先建立了索引,并将数据存储为Delta表。我们在使用ZORDER优化之前和之后都运行了这两种操作,以强调Delta可以为您的地理空间处理工作带来的好处。

对于多边形到多边形的连接,我们关注的是多边形-交点-多边形关系。此关系返回一个布尔指示符,表示两个多边形相交与否的事实。我们已经在H3分辨率7、8和9下运行了这个基准测试,数据集范围从20万个多边形到500万个多边形。

镶嵌多边形相交多边形基准。使用一个20个节点的集群,我们能够在2个多小时内计算出多边形之间近16亿个交叉点。
图13:镶嵌多边形与多边形基准相交

当我们比较在分辨率7和8下的运行时,我们观察到我们的连接在分辨率8下的平均运行时间更好。最值得注意的是,最大的工作量是500万个多边形,在超过15亿次匹配中,500万个多边形的分辨率在分辨率8下运行了2个多小时,而在分辨率7下需要3个小时。选择正确的分辨率是一项重要的任务。如果我们选择一个太粗糙的分辨率(较低的分辨率数字),我们就有可能不充分表示几何图形,这将导致几何数据倾斜没有得到解决,性能将下降。如果我们选择太详细的分辨率(更高的分辨率数字),我们就有过度表示几何图形的风险,这将导致高数据爆炸率和性能下降。保持正确的平衡是至关重要的,在我们的基准测试中,它导致了约30%的运行时优化,这突出了拥有适当的分辨率是多么重要。在我们的两个数据集中,每个形状的平均顶点数从680到690个节点不等,这表明马赛克方法可以处理大容量的复杂形状。

当我们将分辨率提高到9时,我们观察到性能下降了——这是由于过度表示的问题——在每个多边形上使用太多的索引会导致在解析索引匹配上浪费太多的时间,并会降低整体性能。这就是为什么我们增加了马赛克功能,将分析您的数据集,并指示您的多边形所需的数量索引的分布。

% python马赛克进口MosaicAnalyzer
              MosaicAnalyzer()optimal_resolution = analyzer.get_optimal_resolution(geoJsonDF,“几何”optimal_resolution

图14:确定马赛克中的最佳分辨率

有关整套基准测试,请参阅马赛克文档页面在这里,我们讨论了我们运行的所有操作,并对所获得的结果进行了广泛的分析。

构建用例的图集

通过马赛克,我们实现了性能、表达能力和简单性的平衡。有了这样的平衡,我们已经为构建现代的、可扩展的端到端用例铺平了道路,并为未来Databricks在地理空间生态系统中的产品投资和合作做好了准备。bob体育外网下载我们正在与多个垂直行业的客户合作,我们已经确定了马赛克在现实世界领域的许多应用程序。在接下来的几个月里,我们将构建解决方案加速器、教程和使用示例。马赛克github存储库将包含所有这些内容以及现有和后续的代码发布。你可以很容易地获取马赛克笔记本示例使用砖回购并启动您的现代地理空间数据平台-敬请期待更多内容!bob体育客户端下载

开始

尝试马赛克在Databricks加速您的地理空间分析湖屋今天和联系我们了解更BOB低频彩多关于我们如何帮助具有类似用例的客户的信息。

免费试用Databricks

相关的帖子

看到所有bob体育客户端下载平台的博客的帖子