PySpark3结合pandas1.1.5、pyarrow2.0.0运行时出现FlatBuffers方法缺失错误
错误原因
这个java.lang.NoSuchMethodError报错核心是flatbuffers依赖版本冲突:
- PyArrow 2.0.0对应的Apache Arrow Java组件,要求flatbuffers版本不低于1.10.0,报错中提到的
createString(Ljava/lang/CharSequence;)I方法是该版本才新增的重载接口 - 你使用的PySpark 3版本内置的flatbuffers版本低于1.10.0,Spark运行时会优先加载自带的低版本flatbuffers类,缺少Arrow需要的方法,最终触发方法不存在的异常。
可行解决方案
- 方案一:降级PyArrow到适配当前Spark的版本。Spark 3.0.x默认适配PyArrow 0.15.x~1.0.x,你可以直接将PyArrow降到1.0.1版本,pandas 1.1.5无需调整,执行命令:
pip install pyarrow==1.0.1 - 方案二:升级Spark版本到3.2.0及以上。Spark 3.2.0开始内置的flatbuffers版本升级到1.12.0,完全兼容PyArrow 2.0.0的依赖要求。
- 方案三:调整Spark类加载优先级。如果不便调整Spark和PyArrow版本,可以提前下载1.10.0及以上版本的flatbuffers Java包,提交作业时添加参数指定优先加载用户依赖:
spark-submit --conf spark.driver.userClassPathFirst=true \ --conf spark.executor.userClassPathFirst=true \ --jars /你的本地路径/flatbuffers-java-1.12.0.jar \ 你的作业脚本.py
内容的提问来源于stack exchange,提问作者Ranga Reddy
相关产品推荐
相关产品推荐

