跳转至
Apache Sedona 1.9.0 已正式发布,新增 Spark 4.1 支持、proj4sedona 坐标系转换、Bing Tile 函数等众多特性!

使用 Apache Zeppelin

Sedona 提供了一个为 Apache Zeppelin 量身定制的 Helium 可视化插件,最终弥合了 Sedona 与 Zeppelin 之间的鸿沟。安装方法请参阅 安装 Sedona-Zeppelin

Sedona-Zeppelin 提供了两种在 Zeppelin 中可视化空间数据的方式。第一种方式使用 Zeppelin 在地图上绘制所有空间对象;第二种方式利用 SedonaViz 生成地图图像并叠加到地图上。

小规模数据:不使用 SedonaViz

Danger

Zeppelin 只是一个前端可视化框架,本方式不具备扩展性,对于大规模地理空间数据会失败。请向下阅读 SedonaViz 方案。

可以使用 Apache Zeppelin 绘制少量空间对象,例如 1000 个点。假设您已经有一个空间 DataFrame,需要在 Zeppelin 的 Spark notebook 中通过 Scala paragraph 将几何列转换为 WKT 字符串列:

spark.sql(
  """
    |CREATE OR REPLACE TEMP VIEW wktpoint AS
    |SELECT ST_AsText(shape) as geom
    |FROM pointtable
  """.stripMargin)

然后再创建一个 SQL paragraph 拉取数据:

%sql
SELECT *
FROM wktpoint

选择要可视化的几何列:

创建 SQL paragraph 并选择几何列

大规模数据:使用 SedonaViz

SedonaViz 是一个分布式可视化系统,能够大规模地可视化空间数据。请阅读 如何使用 SedonaViz

可以借助 Sedona-Zeppelin 让 Zeppelin 把 SedonaViz 的图像叠加到地图上,从而轻松可视化 10 亿乃至更多的空间对象(取决于集群规模)。

首先,在 Zeppelin Spark notebook 的 Scala paragraph 中对 SedonaViz DataFrame 中的图像进行编码:

spark.sql(
  """
    |CREATE OR REPLACE TEMP VIEW images AS
    |SELECT ST_EncodeImage(image) AS image, (SELECT ST_AsText(bound) FROM boundtable) AS boundary
    |FROM images
  """.stripMargin)

然后创建 SQL paragraph 拉取数据:

%sql
SELECT *, 'I am the map center!'
FROM images

选择图像与对应的地理边界:

选择图像与边界

Zeppelin Spark notebook 演示

我们提供了一个完整的 Zeppelin Spark notebook,演示了所有功能。请下载 Sedona-Zeppelin notebook 模板测试数据 - arealm.csv

需要在 Zeppelin 中导入该 notebook JSON 文件,并修改 notebook 中的输入数据路径。