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

如何在函数中用Boto3重命名Databricks PySpark输出的S3单CSV文件

解决Databricks中PySpark coalesce生成的CSV文件重命名问题

方案1:使用Databricks原生dbutils.fs操作(推荐)

在Databricks中直接用dbutils.fs无需额外配置存储权限(若已挂载存储),可快速完成文件重命名:

# 配置路径参数
source_dir = "/dbfs/mnt/your_mount/output_dir/"  # 支持挂载路径或直接s3://bucket/path/
new_file_name = "desired_name.csv"
new_file_path = f"{source_dir}{new_file_name}"

# 获取目录下所有文件
file_list = dbutils.fs.ls(source_dir)

# 筛选出以part-00000开头的CSV文件(coalesce(1)仅生成一个此类文件)
target_file = next(file for file in file_list if file.name.startswith("part-00000") and file.name.endswith(".csv"))

# 复制为新名称
dbutils.fs.cp(target_file.path, new_file_path)

# 删除原文件
dbutils.fs.rm(target_file.path)

补充校验逻辑(可选)

若不确定目录下是否存在唯一符合条件的文件,可添加校验避免报错:

matching_files = [file for file in file_list if file.name.startswith("part-00000") and file.name.endswith(".csv")]
if len(matching_files) != 1:
    raise Exception("找到多个或零个目标文件,请检查路径")
target_file = matching_files[0]

方案2:使用Boto3操作S3存储

若需直接操作未挂载的S3桶,可通过Boto3遍历并筛选目标文件:

import boto3

# 配置S3参数
bucket_name = "your-bucket-name"
source_prefix = "path/to/output_dir/"  # 前缀末尾需带/,确保仅匹配目标目录
new_file_key = f"{source_prefix}desired_name.csv"

# 初始化S3客户端
s3_client = boto3.client("s3")

# 获取前缀下所有对象
response = s3_client.list_objects_v2(Bucket=bucket_name, Prefix=source_prefix)

# 筛选目标文件
matching_objs = [
    obj for obj in response["Contents"]
    if obj["Key"].startswith(f"{source_prefix}part-00000") and obj["Key"].endswith(".csv")
]
if len(matching_objs) != 1:
    raise Exception("找到多个或零个目标文件,请检查前缀")
old_file_key = matching_objs[0]["Key"]

# 复制并重命名
s3_client.copy_object(
    Bucket=bucket_name,
    Key=new_file_key,
    CopySource={"Bucket": bucket_name, "Key": old_file_key}
)

# 删除原文件
s3_client.delete_object(Bucket=bucket_name, Key=old_file_key)

注意事项

  • 需确保Databricks集群实例角色拥有S3的ListBucket、CopyObject、DeleteObject权限。
  • 目标目录层级较深时,需确认source_prefix的准确性,避免匹配错误对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:40:44