Apache Sedona搭配PySpark调用st_geomfromwkb报ClassCastException错误
问题根因
你使用的Apache Sedona版本中,ST_GeomFromWKB 函数的默认输入参数类型为十六进制编码的字符串格式WKB,而非原生Binary类型的WKB字节数组,因此传入Binary类型的geometry列时触发类型转换异常。
解决方案
方案1:SQL层面转换(适配所有版本)
将binary列先转为十六进制字符串,再传入ST_GeomFromWKB即可,修改SQL语句如下:
select geo_key, STATEFP as state, st_geomfromwkb(hex(geometry)) as geometry from geo_cali
这里用Spark内置的hex()函数将Binary类型的字节数组转换为十六进制字符串,符合老版本Sedona函数的输入要求。
方案2:升级Sedona到1.4.0及以上版本
1.4.0及之后版本的Sedona优化了ST_GeomFromWKB的参数适配,原生支持Binary类型的WKB作为输入,无需额外转换即可直接执行你原来的SQL语句。
方案3:使用DataFrame API调用(可选)
如果偏好Python API而非SQL写法,可以使用如下代码实现转换:
from sedona.sql import functions as F # 1.4.0以下版本写法 df = df.withColumn("geometry", F.st_geomfromwkb(F.hex(F.col("geometry")))) # 1.4.0+版本可以直接写 df = df.withColumn("geometry", F.st_geomfromwkb(F.col("geometry"))) df.show()
内容的提问来源于stack exchange,提问作者Mohd Tajuddin Arshad
相关产品推荐
相关产品推荐

