从Azure Databricks保存CSV到Blob Storage时无法指定文件名的解决方法
解决Azure Databricks写入Blob Storage时无法指定CSV文件名的问题
Spark写入CSV时的默认行为是:将你传入的路径视为文件夹名,在该文件夹下生成以part-开头的分区文件(即便用coalesce(1)合并为单个分区),这是分布式处理框架的设计特性,并非Bug。要生成指定文件名的CSV,需要先写入临时目录,再重命名目标文件并清理临时文件。
方法1:用Databricks dbutils工具(推荐,更简洁)
# 1. 写入临时文件夹(注意修正mode语法,原代码缺少mode关键字) temp_dir = "wasbs://my-blob-container@prod.blob.core.windows.net/folder/temp_csv/" df.coalesce(1).write.option("header", True).mode("overwrite").csv(temp_dir) # 2. 定位临时文件夹中的CSV文件(排除_SUCCESS等元文件) csv_files = [f for f in dbutils.fs.ls(temp_dir) if f.name.endswith(".csv")] if not csv_files: raise Exception("临时目录中未找到CSV文件") part_file_path = csv_files[0].path # 3. 重命名到目标路径,并删除临时文件夹 target_file = "wasbs://my-blob-container@prod.blob.core.windows.net/folder/name.csv" # 先删除已存在的目标文件(避免重命名失败) if dbutils.fs.exists(target_file): dbutils.fs.rm(target_file) dbutils.fs.mv(part_file_path, target_file) dbutils.fs.rm(temp_dir, recurse=True)
方法2:用Spark Hadoop文件系统API(无需dbutils)
如果需要跨环境兼容,可直接调用Hadoop文件系统API操作:
from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate() sc = spark.sparkContext # 定义路径 temp_dir = "wasbs://my-blob-container@prod.blob.core.windows.net/folder/temp_csv/" target_file = "wasbs://my-blob-container@prod.blob.core.windows.net/folder/name.csv" # 1. 写入临时文件夹 df.coalesce(1).write.option("header", True).mode("overwrite").csv(temp_dir) # 2. 获取Hadoop文件系统实例 fs = sc._jvm.org.apache.hadoop.fs.FileSystem.get(sc._jsc.hadoopConfiguration()) temp_path = sc._jvm.org.apache.hadoop.fs.Path(temp_dir) target_path = sc._jvm.org.apache.hadoop.fs.Path(target_file) # 3. 查找并重命名part文件 for status in fs.listStatus(temp_path): file_path = status.getPath() if file_path.getName().endswith(".csv"): # 覆盖已存在的目标文件 if fs.exists(target_path): fs.delete(target_path, False) fs.rename(file_path, target_path) break # 4. 删除临时文件夹 fs.delete(temp_path, True)
注意事项
coalesce(1)仅适合小数据量:如果数据量过大,合并为单个分区可能导致内存溢出,此时建议保持分布式写入,或用其他工具(如Azure Data Factory)后续重命名文件。- 并发场景处理:若有多个任务同时操作同一路径,建议给临时目录加唯一标识(如时间戳),避免冲突。
内容的提问来源于stack exchange,提问作者andKaae
相关产品推荐
相关产品推荐

