PySpark创建DataFrame时遇PicklingError与RecursionError求助
解决Spark创建DataFrame时的递归序列化错误
问题根源
你碰到的PicklingError+RecursionError,核心是Python 3.14和Spark 3.5.7的序列化工具不兼容。Python 3.14对pickle机制做了底层改动,而Spark 3.5.7自带的CloudPickle还没适配这个新版本,序列化Row对象时触发了无限递归,最终栈溢出。
可行解决方案
1. 降级Python版本(最快解决)
Spark 3.5.x官方支持的Python版本是3.8-3.13,把Python降到3.13或更低版本,重新配置环境后就能正常运行代码。
2. 升级Spark版本
如果不想动Python版本,可以升级Spark到3.5.8及以上或者4.0.x系列,这些版本已经修复了对Python 3.14的兼容性问题。
3. 临时绕开:换一种DataFrame创建方式
不用Row对象,改用普通列表或字典构造数据,避开序列化问题:
# 方案A:用列表组数据 data = [("hello", None, 1)] df = spark.createDataFrame(data, myManualSchema) # 方案B:用字典(字段名要和schema对应) data = [{"some": "hello", "col": None, "names": 1}] df = spark.createDataFrame(data, myManualSchema)
验证
修改后执行df.show(),应该能正常输出:
+-----+----+-----+ | some| col|names| +-----+----+-----+ |hello|null| 1| +-----+----+-----+
内容的提问来源于stack exchange,提问作者GINzzZ100
相关产品推荐
相关产品推荐

