You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Sedona Python API调用报错:'JavaPackage'对象不可调用

问题分析与解决

核心原因

你遇到的TypeError: 'JavaPackage' object is not callable是因为Sedona Shaded包版本与PySpark版本不兼容。当前你使用的sedona-spark-shaded-3.0_2.12:1.5.3是针对PySpark 3.0.x系列的,而你的PySpark版本为3.3.2,版本不匹配导致Python API无法找到对应的Java实现类。

SQL功能正常是因为Spark SQL扩展已注册Sedona的SQL函数,无需直接调用底层Java类;但Python API需要直接绑定对应的Java UDF,版本不匹配就会出现找不到类的问题。

解决方案

1. 替换兼容的Sedona Shaded包

修改spark.jars.packages配置,将Sedona包换成适配PySpark 3.3.x的版本:

.set('spark.jars.packages',
'org.apache.sedona:sedona-spark-shaded-3.3_2.12:1.5.3,org.datasyslab:geotools-wrapper:1.5.3-28.2')\

注意:Sedona Shaded包命名规则为sedona-spark-shaded-{spark主版本号}_{scala版本号}:{sedona版本号},PySpark 3.3.x对应后缀3.3,你的环境scala版本2.12匹配无误。

2. 正确初始化Sedona上下文

创建SparkSession后,必须通过Sedona的初始化方法加载Python API所需的Java绑定:

from sedona.spark import SedonaContext

# 构建SparkSession(保留你的原有配置)
spark = SparkSession.builder \
    .appName("SedonaTest") \
    .set('spark.jars.packages', 'org.apache.sedona:sedona-spark-shaded-3.3_2.12:1.5.3,org.datasyslab:geotools-wrapper:1.5.3-28.2') \
    .set('spark.jars.repositories', 'https://artifacts.unidata.ucar.edu/repository/unidata-all') \
    .set("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,org.apache.sedona.viz.sql.SedonaVizExtensions,org.apache.sedona.sql.SedonaSqlExtensions") \
    .getOrCreate()

# 初始化Sedona上下文
spark = SedonaContext.create(spark)

3. 测试Python API

修改配置后重新运行你的Python函数代码:

from sedona.sql import st_constructors as stc

# 创建测试DataFrame
df = spark.sql("SELECT array(0.0, 1.0, 2.0) AS values")
# 使用Python API创建Point
df = df.select(stc.ST_Point(1.0, 3.0).alias("point"))
df.show()

此时应能正常运行,不再出现JavaPackage相关错误。

版本兼容性验证

Sedona 1.5.3支持的PySpark版本包括3.0、3.1、3.2、3.3,对应Shaded包的后缀分别为3.0、3.1、3.2、3.3,需严格匹配你的PySpark主版本号。

内容的提问来源于stack exchange,提问作者Alexander Arlievsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:57:34