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

在Databricks的DBFS中压缩CSV为ZIP遇错误,求解决方案

解决Databricks中压缩ADLS CSV文件报错的问题

错误原因

直接通过/dbfs路径使用zipfile写入Azure Data Lake Storage(ADLS)会触发OSError: [Errno 95] Operation not supported,因为DBFS的FUSE挂载层对对象存储的随机写入操作支持有限,而zipfile的写入逻辑依赖本地文件系统的随机访问能力,ADLS作为对象存储不支持这类操作。

可行解决方法

方法一:本地临时目录中转压缩(适合大文件)

先将CSV文件复制到Databricks节点的本地临时目录(/tmp),完成压缩后再上传回ADLS,规避对象存储的操作限制:

import zipfile
import shutil
import os

# 定义路径
dbfs_csv_path = '/dbfs/mnt/<path>.csv'
dbfs_zip_path = '/dbfs/mnt/<path>.zip'
local_csv = '/tmp/temp_csv.csv'
local_zip = '/tmp/compressed.zip'

# 复制ADLS文件到本地临时目录
shutil.copy(dbfs_csv_path, local_csv)

# 压缩本地文件,指定压缩算法
with zipfile.ZipFile(local_zip, 'w', zipfile.ZIP_DEFLATED) as zip_obj:
    # arcname参数设置压缩包内的文件名,避免带本地路径
    zip_obj.write(local_csv, arcname='data.csv')

# 将压缩文件上传回ADLS
shutil.copy(local_zip, dbfs_zip_path)

# 清理本地临时文件
os.remove(local_csv)
os.remove(local_zip)

方法二:用Pandas直接生成压缩文件(适合小文件)

利用Pandas的to_csv方法自带的压缩功能,直接读取CSV并写入ZIP文件,无需中转:

import pandas as pd

csv_path = '/dbfs/mnt/<path>.csv'
zip_path = '/dbfs/mnt/<path>.zip'

# 读取CSV并写入压缩文件,index=False避免写入索引列
pd.read_csv(csv_path).to_csv(zip_path, compression='zip', index=False)

注意事项

  • 本地临时目录(/tmp)的空间由Databricks节点配置决定,大文件压缩前需确认节点有足够剩余空间
  • 确保ADLS挂载点拥有读写权限,避免上传/复制时出现权限错误

内容的提问来源于stack exchange,提问作者Cristian Ispan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:39:18