Databricks中大DF调用df.toPandas().to_csv()报[Errno95]错误求助
关于Databricks导出大DataFrame时出现[Errno 95] Operation not supported的原因分析
核心原因1:Driver节点内存过载引发底层IO异常
- 代码中
df.toPandas()会把分布式Spark DataFrame完整加载到Driver节点内存中。当DataFrame达到10万行以上时,数据量超出Driver节点内存承载上限,触发内存溢出,进而导致后续to_csv写入操作触发系统层面的[Errno 95]异常——内存不足引发的文件写入失败被系统标记为“操作不支持”。 - 小DataFrame能正常执行,是因为数据量小,Driver内存可轻松承载,不会触发内存瓶颈。
核心原因2:Pandas单线程写入与DBFS分布式存储的兼容性冲突
- 通过
/dbfs路径直接调用Pandas的to_csv方法,本质是用本地文件系统写入逻辑操作分布式DBFS。大文件写入时,Pandas的单线程、单文件写入模式与DBFS的分布式存储模型不匹配,底层存储系统无法处理这类大文件连续写入请求,从而返回“操作不支持”错误。 - 小文件写入过程短暂,数据量小,不会暴露这种兼容性矛盾。
可能的附加原因:外部挂载存储的协议/权限限制
- 如果
saveMountName对应外部挂载存储(如S3、ADLS),大文件写入需要多块分写,可能触发存储协议超时、权限令牌刷新不及时等问题,导致存储端返回“操作不支持”错误。 - 小文件写入通常无需分块,不会触发这类协议层面的限制。
内容的提问来源于stack exchange,提问作者William D'Alessandro
相关产品推荐
相关产品推荐

