Apache Sedona本地Python脚本运行失败,容器内正常问题排查
问题描述
我在apache/sedona:latest Docker容器的Jupyter Notebook中测试Sedona代码一切正常,但在本地以Python脚本运行时,代码在getOrCreate()方法处报错。
本地环境配置:
- 通过pip安装了
pyspark==3.4.1、apache-sedona[spark]==1.6.1 - 转发了4040、4041、8080、8081、8888端口
- Python版本3.12
容器环境配置:
- Python版本3.10
- Spark 3.4.1、JDK 19,未安装Scala
本地启动脚本代码如下:
from sedona.spark import * from sedona.sql import ST_GeoHash, ST_MakeValid import time start_time = time.time() config = ( SedonaContext.builder() .config( "spark.jars.packages", "org.apache.sedona:sedona-spark-3.0_2.12:1.6.1,", "org.datasyslab:geotools-wrapper:1.6.1-28.2", ) .config("spark.jars.repositories", "https://artifacts.unidata.ucar.edu/repository/unidata-all") .getOrCreate() ) sedona = SedonaContext.create(config)
可能的问题点及解决方法
1. Spark依赖包配置语法错误
你的代码中spark.jars.packages的配置存在参数传递错误:
- 错误地将两个依赖包拆分成了
config方法的两个独立参数,而config每次只能接收一个键值对 - 第一个依赖包字符串末尾多了一个多余的逗号
修正方法:将两个依赖包合并为一个字符串,用逗号分隔,作为spark.jars.packages的唯一值:
config = ( SedonaContext.builder() .config( "spark.jars.packages", "org.apache.sedona:sedona-spark-3.0_2.12:1.6.1,org.datasyslab:geotools-wrapper:1.6.1-28.2" ) .config("spark.jars.repositories", "https://artifacts.unidata.ucar.edu/repository/unidata-all") .getOrCreate() )
2. Python版本兼容性问题
Spark 3.4.1官方支持的Python版本范围是3.7至3.11,而你本地使用的Python 3.12不在支持列表内,可能会导致底层交互逻辑出错、依赖库兼容性问题。
解决方法:将本地Python版本降级到3.10或3.11,与容器环境保持一致。
3. JDK版本不匹配
容器使用JDK 19,若本地JDK版本与容器差异较大(例如使用JDK 8或JDK 21),可能会触发Sedona或Spark的运行时兼容性问题。
解决方法:检查本地JDK版本,尽量与容器的JDK 19保持一致;若无法更换JDK,确认Sedona 1.6.1是否兼容当前本地JDK版本。
内容的提问来源于stack exchange,提问作者Sebastian H
相关产品推荐
相关产品推荐

