Apache Sedona版本兼容异常:PySpark环境空间操作报错求助
问题
环境配置:
- Apache Sedona 1.5.1
- PySpark 3.2.1
- Scala 2.12.18
已通过Maven安装相关依赖包,参考官方示例添加Python Adapter后运行以下代码:
from sedona.spark import * spark = SedonaContext.builder().\ config('spark.jars.packages', 'org.apache.sedona:sedona-spark-3.4_2.12:1.5.1,' 'org.datasyslab:geotools-wrapper:1.5.1-28.2,' 'uk.co.gresearch.spark:spark-extension_2.12:2.11.0-3.4,' 'org.apache.sedona:sedona-python-adapter-3.0_2.12:1.4.1'). \ config('spark.jars.repositories', 'https://artifacts.unidata.ucar.edu/repository/unidata-all'). \ getOrCreate() sedona = SedonaContext.create(spark)
执行空间操作时出现如下错误:
Py4JJavaError: An error occurred while calling o206.showString. : java.lang.NoSuchMethodError: 'double org.locationtech.jts.geom.Coordinate.getZ()' at org.apache.sedona.common.geometrySerde.GeometrySerializer.getCoordinateType(GeometrySerializer.java:449) at org.apache.sedona.common.geometrySerde.GeometrySerializer.serializePoint(GeometrySerializer.java:112) at org.apache.sedona.common.geometrySerde.GeometrySerializer.serialize(GeometrySerializer.java:43) at org.apache.sedona.sql.utils.GeometrySerializer$.serialize(GeometrySerializer.scala:36) at org.apache.spark.sql.sedona_sql.expressions.implicits$GeometryEnhancer.toGenericArrayData(implicits.scala:139) at org.apache.spark.sql.sedona_sql.expressions.InferredTypes$.$anonfun$buildSerializer$1(InferredExpression.scala:155) at org.apache.spark.sql.sedona_sql.expressions.InferredExpression.eval(InferredExpression.scala:71) at org.apache.spark.sql.catalyst.expressions.UnaryExpression.eval(Expression.scala:477) at org.apache.spark.sql.catalyst.optimizer.ConstantFolding$$anonfun$apply$1$$anonfun$applyOrElse$1.applyOrElse(expressions.scala:69)
目前可加载普通DataFrame,但无法执行空间操作,请问问题原因是什么?
原因分析与解决办法
核心问题:多组件版本不匹配
- Sedona Spark组件与PySpark版本错配:你使用的
sedona-spark-3.4_2.12:1.5.1是为PySpark 3.4.x适配的版本,但你的环境是PySpark 3.2.1,必须选择对应PySpark 3.2的Sedona核心包。 - Python Adapter与Sedona主版本不一致:核心包用了Sedona 1.5.1,但Python Adapter是1.4.1,两者版本必须完全对齐,否则会出现API调用不兼容。
- Spark Extension版本与PySpark版本不兼容:
spark-extension_2.12:2.11.0-3.4是适配PySpark 3.4的版本,需要替换为对应PySpark 3.2的分支版本。
修正后的依赖配置
将spark.jars.packages替换为以下内容,确保所有组件版本与你的PySpark 3.2.1完全匹配:
from sedona.spark import * spark = SedonaContext.builder().\ config('spark.jars.packages', 'org.apache.sedona:sedona-spark-3.2_2.12:1.5.1,' 'org.datasyslab:geotools-wrapper:1.5.1-28.2,' 'uk.co.gresearch.spark:spark-extension_2.12:2.7.0-3.2,' 'org.apache.sedona:sedona-python-adapter-3.2_2.12:1.5.1'). \ config('spark.jars.repositories', 'https://artifacts.unidata.ucar.edu/repository/unidata-all'). \ getOrCreate() sedona = SedonaContext.create(spark)
补充说明
- Sedona命名规则为
sedona-spark-[PySpark版本]_Scala版本:Sedona版本,必须严格对应本地PySpark和Scala版本。 - 所有Sedona相关组件(核心包、Python Adapter)的版本号必须完全一致,避免跨版本API差异。
- Spark Extension版本格式为
spark-extension_Scala版本:Extension版本-PySpark版本,需选择与PySpark版本匹配的分支。
内容的提问来源于stack exchange,提问作者bobglu
相关产品推荐
相关产品推荐

