Azure Databricks:使用 Spark SQL 进行地理空间查询

问题描述

目前我有以下几点:

  • 带有设备、位置和时间戳的表的数据块;
  • Web Api 在 minLat、minLon、maxLat、maxLon 中接收请求并创建一个 sql 查询,lat 介于 minLat 和 maxLat 之间,lon 介于 minLon 和 maxLon 之间;
  • 接收从 Web API 生成查询并在数据块中创建与集群的 JDBC 连接以执行查询函数

我想看看我是否可以用一些空间库改进“minLat 和 maxLat 之间的纬度以及 minLon 和 maxLon 之间的 lon”。我检查过的一个这样的例子是 GeoSpark。这里的问题是当前版本的 GeoSpark(和 GeoSParksql)仅适用于 spark v2.3,并且 databricks 中支持的运行时不再适用于该版本。

知道我能做什么吗?

注意:我现在不能偏离 sql

解决方法

GeoSpark 以 Apache Sedona project 的身份加入了 Apache 基金会,支持 Spark 3.0 的版本大约在 2 周前发布,因此您可以像使用 GeoSpark 一样使用它。

附言为了自动注册函数,我们可以创建类似这样的东西,编译成 jar,然后使用 --conf spark.sql.extensions=...SomeExtensions 配置 Spark:

class SomeExtensions extends (SparkSessionExtensions => Unit) {
  def apply(e: SparkSessionExtensions): Unit = {
    e.injectCheckRule(spark => {
      // Setup something
      _ => Unit
    })
  }
}