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

纯 SQL 环境

Sedona v1.0.1 开始,您可以在纯 Spark SQL 环境中使用 Sedona,示例代码均以 SQL 编写。

SedonaSQL 支持 SQL/MM Part3 空间 SQL 标准。SedonaSQL 详细的 API 说明请参阅 SedonaSQL API

启动会话

按以下方式启动 spark-sql(请将 <VERSION> 替换为实际版本,如 1.9.0):

使用 Apache Sedona 启动 spark-sql

spark-sql --packages org.apache.sedona:sedona-spark-shaded-3.3_2.12:<VERSION>,org.datasyslab:geotools-wrapper:1.9.0-33.5 \
  --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
  --conf spark.kryo.registrator=org.apache.sedona.viz.core.Serde.SedonaVizKryoRegistrator \
  --conf spark.sql.extensions=org.apache.sedona.viz.sql.SedonaVizExtensions,org.apache.sedona.sql.SedonaSqlExtensions

请将 artifact 名称中的 3.3 替换为对应的 Spark major.minor 版本。

这会注册 SedonaSQL 与 SedonaViz 的全部类型、函数与优化规则。

加载数据

下面使用 examples/sql 目录中的数据。从 CSV 文件加载数据需要执行以下两条命令:

使用以下代码加载数据并创建原始 DataFrame:

CREATE TABLE IF NOT EXISTS pointraw (_c0 string, _c1 string)
USING csv
OPTIONS(header='false')
LOCATION '<some path>/sedona/examples/sql/src/test/resources/testpoint.csv';

CREATE TABLE IF NOT EXISTS polygonraw (_c0 string, _c1 string, _c2 string, _c3 string)
USING csv
OPTIONS(header='false')
LOCATION '<some path>/sedona/examples/sql/src/test/resources/testenvelope.csv';

转换数据

需要把点和多边形数据转换为对应的几何类型:

CREATE OR REPLACE TEMP VIEW pointdata AS
  SELECT ST_Point(cast(pointraw._c0 as Decimal(24,20)), cast(pointraw._c1 as Decimal(24,20))) AS pointshape
  FROM pointraw;

CREATE OR REPLACE TEMP VIEW polygondata AS
  select ST_PolygonFromEnvelope(cast(polygonraw._c0 as Decimal(24,20)),
        cast(polygonraw._c1 as Decimal(24,20)), cast(polygonraw._c2 as Decimal(24,20)),
        cast(polygonraw._c3 as Decimal(24,20))) AS polygonshape
  FROM polygonraw;

处理数据

例如,对多边形和点数据做一次连接:

SELECT * from polygondata, pointdata
WHERE ST_Contains(polygondata.polygonshape, pointdata.pointshape)
      AND ST_Contains(ST_PolygonFromEnvelope(1.0,101.0,501.0,601.0), polygondata.polygonshape)
LIMIT 5;

GEOMETRY 数据类型支持

Sedona 提供了一个 Spark SQL 解析器扩展,使 DDL 语句中可以直接使用 GEOMETRY 数据类型。例如,可以在创建表时声明带几何列的 schema:

CREATE TABLE geom_table (id STRING, version INT, geometry GEOMETRY)
USING geoparquet
LOCATION '/path/to/geoparquet_geom_table';

SELECT * FROM geom_table LIMIT 10;

该 SQL 解析器扩展默认启用。如果它与其他扩展存在冲突需要禁用,请在启动 spark-sql 时通过 --conf spark.sedona.enableParserExtension=false 关闭。