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

Azure Databricks写入Pandas DataFrame至DBFS Excel报错:OSError 95

问题分析与解决方案

核心原因

Azure Databricks的/dbfs路径是DBFS的FUSE挂载实现,底层依赖对象存储(如Azure Blob Storage),而对象存储不支持随机写入操作。Pandas的to_excel(基于openpyxl引擎)在保存文件时需要多次随机读写(比如修改文件元数据、写入工作表内容),因此会触发OSError: [Errno 95] Operation not supported;而to_csv是顺序写入,所以可以正常工作。

解决方案1:先写入集群本地磁盘,再拷贝到DBFS

集群本地磁盘(如/tmp)支持随机读写,适合Excel文件的生成,之后再将文件拷贝到DBFS。

import pandas as pd
import shutil

# 读取数据
url = 'https://www.stats.govt.nz/assets/Uploads/Business-price-indexes/Business-price-indexes-March-2019-quarter/Download-data/business-price-indexes-march-2019-quarter-csv.csv'
data = pd.read_csv(url)

# 写入集群本地临时目录
local_output_path = '/tmp/export.xlsx'
with pd.ExcelWriter(local_output_path, engine="openpyxl") as writer:
    data.to_excel(writer)

# 拷贝到DBFS(两种方式二选一)
# 方式1:用shutil
dbfs_output_path = '/dbfs/tmp/export.xlsx'
shutil.copy(local_output_path, dbfs_output_path)

# 方式2:用Databricks dbutils(推荐,更适配Databricks环境)
dbutils.fs.cp(f'file:{local_output_path}', '/tmp/export.xlsx')

解决方案2:使用Spark Excel插件写入

通过Spark的第三方Excel插件直接写入DBFS,避免本地磁盘中转,适合大文件场景。

  1. 安装依赖库:在集群的"库"页面添加Maven包,坐标为com.crealytics:spark-excel_2.12:0.13.7(适配Databricks Runtime 10.4的Scala 2.12版本)。

  2. 执行代码:

import pandas as pd

# 读取数据
url = 'https://www.stats.govt.nz/assets/Uploads/Business-price-indexes/Business-price-indexes-March-2019-quarter/Download-data/business-price-indexes-march-2019-quarter-csv.csv'
data = pd.read_csv(url)

# 将Pandas DataFrame转为Spark DataFrame
spark_df = spark.createDataFrame(data)

# 写入DBFS的Excel文件
spark_df.write.format("com.crealytics.spark.excel") \
  .option("header", "true") \
  .mode("overwrite") \
  .save("/tmp/export_spark.xlsx")

额外验证步骤

确认openpyxl依赖正常:如果集群环境中openpyxl版本过低或缺失,也可能导致写入失败,可通过以下命令升级:

%pip install openpyxl --upgrade

内容的提问来源于stack exchange,提问作者Playing With BI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:45:31