繁体   English   中英

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

[英]How to use Apache Sedona on Databricks Delta Live tables?

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

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

%pip install apache-sedona

然后我只使用 SedonaRegistrator.registerAll (在 SQL 中启用地理空间处理)并返回一个空的 dataframe (无论如何都没有到达该代码):

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 配置外,其他所有内容都保持默认:

DLT Spark 配置

这是 spark.jars.packages 的未删减值: 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

根据本文档,这是必需的。

当我运行管道时,我收到以下错误:

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

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

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

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

  • 使用初始化脚本 -> DLT 不支持
  • 使用 jar 库 -> DLT 不支持
  • 使用 maven 库 -> DLT 不支持

有谁知道如何/是否可以做到?

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

8 月 1 日更新:现在支持 DLT 中的 init 脚本,因此您可以按照Sedona 的说明通过 init 脚本安装它。 但要小心选择正确的版本,因为 DLT 使用修改后的运行时。

但是,如果您对 Databricks 上的地理空间内容感兴趣,您可以查看最近发布的Mosaic 项目带有公告的博客),它支持许多“标准”地理空间功能,但针对 Databricks 进行了高度优化,并且还与 Delta Live Tables 一起使用. 以下是 快速入门指南中采用的 DLT 管道示例,该管道使用st_contains等函数:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM