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

Spark DataFrame调用write.csv()后如何获取生成的目标CSV文件名

PySpark写入CSV后获取生成文件名称的方法

当然有办法获取生成的CSV文件名,Spark本身不会直接返回写入的文件名,你可以通过遍历输出目录的方式筛选目标文件,以下是两种常用的实现方案:

方案1:使用Spark内置的Hadoop FileSystem API(兼容所有存储介质)

这种方法支持本地文件系统、HDFS、S3等所有Spark支持的存储类型,不需要依赖存储介质的本地访问能力:

from pyspark.sql import SparkSession

# 原有写入逻辑
spark = SparkSession.builder.appName("get_csv_name").getOrCreate()
df = spark.read.parquet(file)
df.write.csv('output')

# 遍历输出目录获取part文件
sc = spark.sparkContext
Path = sc._jvm.org.apache.hadoop.fs.Path
fs = sc._jvm.org.apache.hadoop.fs.FileSystem.get(sc._jsc.hadoopConfiguration())

output_dir = Path("output")
file_list = fs.listStatus(output_dir)
csv_file_names = []
for file_status in file_list:
    file_name = file_status.getPath().getName()
    # 匹配Spark生成的CSV分片文件规则
    if file_name.startswith("part-") and file_name.endswith(".csv"):
        csv_file_names.append(file_name)

# 打印所有生成的CSV文件名
print(csv_file_names)

方案2:使用Python原生os模块(仅适用于本地文件系统)

如果你的输出目录是当前执行脚本的节点可以直接访问的本地路径,可以直接用Python的文件操作接口遍历:

import os

csv_file_names = [
    f for f in os.listdir("output") 
    if f.startswith("part-") and f.endswith(".csv")
]
print(csv_file_names)

补充说明

  • Spark生成的part-前缀文件数量和写入前DataFrame的分区数一一对应,如果你只需要输出一个CSV文件,可以在写入前执行df = df.coalesce(1)把分区合并为1,这样输出目录里只会有1个符合规则的CSV文件。
  • 输出文件名里的随机UUID是Spark为了避免文件重名冲突自动生成的,确实无法提前预知,必须写入完成后遍历目录才能获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 04:54:02