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

如何在Databricks中压缩两个文件?解决压缩文件无法查看问题

在Databricks中压缩文件的最优方法及问题排查

原代码的问题分析

  1. 路径重复错误:你写的/dbfs/dbfs/tmp/folder1/是无效路径,DBFS的本地挂载路径本身就是/dbfs/,正确路径应为/dbfs/tmp/folder1/test1.parquet。
  2. 输出位置错误:直接指定myzip.zip会将压缩文件生成在Driver节点的本地文件系统,而非DBFS路径下,所以你在目标DBFS文件夹中找不到它。

修正后的基础压缩方法(适合小文件)

如果文件体积不大,单节点即可处理,可使用以下两种方式:

方式1:修正zipfile代码

import zipfile

# 修正路径,移除重复的/dbfs/前缀
file_paths = ['/dbfs/tmp/folder1/test1.parquet', 
              '/dbfs/tmp/folder1/test2.parquet']
# 指定压缩文件的DBFS全路径
zip_name = '/dbfs/tmp/folder1/myzip.zip'

# 使用with语句自动管理文件句柄,添加压缩参数实现真正压缩
with zipfile.ZipFile(zip_name, "w", zipfile.ZIP_DEFLATED) as zip_file:
    for file in file_paths:
        # 可选:设置压缩包内的文件名称,避免带完整路径
        zip_file.write(file, arcname=file.split('/')[-1])

方式2:使用Shell命令(更简洁)

直接通过Databricks的%sh魔法命令调用Linux原生压缩工具,效率更高:

%sh
cd /dbfs/tmp/folder1
zip myzip.zip test1.parquet test2.parquet

分布式大文件压缩方案(适合大体积/多分区文件)

如果文件过大或为Spark生成的分布式多分区文件,单节点处理易出现内存瓶颈,推荐用Spark原生的zip格式输出:

# 读取目标parquet文件
df = spark.read.parquet('/tmp/folder1/test1.parquet', '/tmp/folder1/test2.parquet')

# 合并为单个文件后保存为zip格式
df.coalesce(1).write.format("zip").save("/tmp/folder1/myzip_temp")

# 移动生成的zip文件到指定位置并清理临时目录
dbutils.fs.mv(
    '/tmp/folder1/myzip_temp/part-00000-*.zip',
    '/tmp/folder1/myzip_spark.zip'
)
dbutils.fs.rm('/tmp/folder1/myzip_temp', recurse=True)

方法选择总结

  • 小文件优先用Shell命令或修正后的zipfile代码,简单直接;
  • 大文件/分布式文件用Spark的zip格式输出,避免单节点资源限制。

内容的提问来源于stack exchange,提问作者data en

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:37:27