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

在 AWS Glue 上安装

本教程介绍如何配置 Glue notebook 与 Glue ETL 作业。本文假设您已具备 AWS Glue 作业的基础使用经验。

教程中使用 Sedona 1.9.0 与 Glue 5.0,运行环境为 Spark 3.5.4、Java 17、Scala 2.12 和 Python 3.11。Glue 5.0 推荐使用 Sedona 1.8.0 及以上版本。

Warning

重要: 自 Sedona 1.8.0 起不再支持 Java 8 与 Spark 3.3。Sedona 1.8.0+ 需要 Glue 5.0+(支持 Java 17 与 Spark 3.5+)。如果您必须停留在 Glue 4.0(Spark 3.3、Java 8),请使用 Sedona 1.7.1 或更低版本,并将下方的 sedona-spark-shaded-3.5_2.12 artifact 替换为 sedona-spark-shaded-3.3_2.12

收集 Maven 链接

您需要让 Glue 作业指向 Sedona 与 Geotools 的 jar。推荐直接使用 Maven 上发布的 jar。下面给出的链接是为 Glue 5.0 准备的。

Sedona Jar:Maven Central

Geotools Jar:Maven Central

Note

请务必选择 Scala 2.12 与 Spark 3.5 的版本。Scala 2.13 的 jar 与 Glue 5.0 不兼容。

配置 Glue 作业

获得 jar 链接后,您可以将它们与 apache-sedona Python 包一起配置到 Glue 作业中。notebook 类型与 script 类型的作业配置方式略有不同。

Note

请务必保持 jar 与 Python 包的 Sedona 版本一致。

Notebook 作业

在创建 sparkContext 或 glueContext 之前,添加以下 cell magic。第一行指向 jar,第二行直接通过 pip 安装 Sedona Python 包。

# Sedona Config
%extra_jars https://repo1.maven.org/maven2/org/apache/sedona/sedona-spark-shaded-3.5_2.12/1.9.0/sedona-spark-shaded-3.5_2.12-1.9.0.jar, https://repo1.maven.org/maven2/org/datasyslab/geotools-wrapper/1.9.0-33.5/geotools-wrapper-1.9.0-33.5.jar
%additional_python_modules apache-sedona==1.9.0

如果您使用 Glue 提供的示例 notebook,则第一个 cell 现在大致应是:

%idle_timeout 2880
%glue_version 5.0
%worker_type G.1X
%number_of_workers 5

# Sedona Config
%extra_jars https://repo1.maven.org/maven2/org/apache/sedona/sedona-spark-shaded-3.5_2.12/1.9.0/sedona-spark-shaded-3.5_2.12-1.9.0.jar, https://repo1.maven.org/maven2/org/datasyslab/geotools-wrapper/1.9.0-33.5/geotools-wrapper-1.9.0-33.5.jar
%additional_python_modules apache-sedona==1.9.0


import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)

可以通过运行以下 cell 验证安装:

from sedona.spark import *

sedona = SedonaContext.create(spark)
sedona.sql("SELECT ST_POINT(1., 2.) as geom").show()

ETL 作业

Glue 也将这种作业称为 Script 作业。在作业页面上切换到 “Job details” 选项卡,展开页面底部的 “Advanced properties” 部分。在 “Dependent JARs path” 字段中填入两个 jar 的链接,并以英文逗号分隔。

要添加 Sedona Python 包,进入 “Job Parameters” 部分新增一个参数,键为 --additional-python-modules,值为 apache-sedona==1.9.0

为验证安装,可在脚本中加入以下代码:

from sedona.spark import *

config = SedonaContext.builder().getOrCreate()
sedona = SedonaContext.create(config)

sedona.sql("SELECT ST_POINT(1., 2.) as geom").show()

将其加入脚本后保存并运行作业。如果作业运行成功,则说明安装成功。