如何在 Databricks Delta Live 表上使用 Apache Sedona?

How to use Apache Sedona on Databricks Delta Live tables?

我正在尝试使用 Apache Sedona 运行 在 Delta Live Table 中进行一些地理空间转换。我尝试定义一个最小的示例管道来演示我遇到的问题。

我笔记本的第一个单元格,我安装了 apache-sedona Python 包:

%pip install apache-sedona

然后我只使用 SedonaRegistrator.registerAll(在 SQL 中启用地理空间处理)和 return 一个空数据框(无论如何都达不到该代码):

import dlt
from pyspark.sql import SparkSession
from sedona.register import SedonaRegistrator
 
 
@dlt.table(comment="Test temporary table", temporary=True)
def my_temp_table():
    SedonaRegistrator.registerAll(spark)
    return spark.createDataFrame(data=[], schema=StructType([]))

我创建了 DLT 管道,将所有内容都保留为默认设置,spark 配置除外:

这是 spark.jars.packages 的未切割值:org.apache.sedona:sedona-python-adapter-3.0_2.12:1.2.0-incubating,org.datasyslab:geotools-wrapper:1.1.0-25.2

根据这个documentation.

这是必须的

当我 运行 管道时,出现以下错误:

py4j.Py4JException: An exception was raised by the Python Proxy. Return Message: Traceback (most recent call last):
  File "/databricks/spark/python/lib/py4j-0.10.9.1-src.zip/py4j/java_gateway.py", line 2442, in _call_proxy
    return_value = getattr(self.pool[obj_id], method)(*params)
  File "/databricks/spark/python/dlt/helpers.py", line 22, in call
    res = self.func()
  File "<command--1>", line 8, in my_temp_table
  File "/local_disk0/.ephemeral_nfs/envs/pythonEnv-0ecd1771-412a-4887-9fc3-44233ebe4058/lib/python3.8/site-packages/sedona/register/geo_registrator.py", line 43, in registerAll
    cls.register(spark)
  File "/local_disk0/.ephemeral_nfs/envs/pythonEnv-0ecd1771-412a-4887-9fc3-44233ebe4058/lib/python3.8/site-packages/sedona/register/geo_registrator.py", line 48, in register
    return spark._jvm.SedonaSQLRegistrator.registerAll(spark._jsparkSession)
TypeError: 'JavaPackage' object is not callable

我可以通过在我的计算机上 运行ning spark 并避免安装上面 spark.jars.packages 中指定的包来重现此错误。

我猜这个 DLT 管道没有正确配置来安装 Apache Sedona。我找不到任何描述如何在 DLT 管道上安装 Sedona 或其他软件包的文档。

到目前为止我也尝试过,但没有成功:

有谁知道how/if可以做到吗?

不幸的是,Delta Live Tables 尚不支持安装第 3 方 Java 库,因此您现在 无法将 Sedona 与 DLT 一起使用。

但如果您对 Databricks 上的地理空间信息感兴趣,您可以查看最近发布的 project Mosaic (blog with announcement) that supports many of the "standard" geospatial functions, but heavily optimized for Databricks, and also works with Delta Live Tables. Here is an example of DLT pipeline adopted from the quickstart guide,它使用 st_contains 等函数: