如何使用自定义文件名将 PySpark 数据框另存为 CSV?

How to save a PySpark dataframe as a CSV with custom file name?

这是我要保存为 csv 的 spark DataFrame。

type(MyDataFrame)
--Output: <class 'pyspark.sql.dataframe.DataFrame'>

要将此保存为 CSV,我有以下代码:

MyDataFrame.write.csv(csv_path, mode = 'overwrite', header = 'true')

我保存的时候,文件名是这样的:

part-0000-766dfdf-78fg-aa44-as3434rdfgfg-c000.csv

有什么方法可以在保存时给它一个自定义名称吗?喜欢 "MyDataFrame.csv"

没有。这就是 Spark 的工作方式(至少目前如此)。您将 MyDataFrame.csv 作为 目录名称 ,并且在该目录下,您将拥有多个格式与 part-0000-766dfdf-78fg-aa44-as3434rdfgfg-c000.csvpart-0000-766dfdf-78fg-aa44-as3434rdfgfg-c001.csv

不推荐,但如果您的数据足够小(可以说这里是“足够小”),您可以随时将其转换为 Pandas 并将其保存到一个 CSV 文件中,您可以随意命名通缉

我也一样requirement.You可以写入一个路径,然后改变文件路径。这是我的解决方案。

def write_to_hdfs_specify_path(df, spark, hdfs_path, file_name):
    """
    :param df: dataframe which you want to save
    :param spark: sparkSession
    :param hdfs_path: target path(shoul be not exises)
    :param file_name: csv file name
    :return: 
    """
    sc = spark.sparkContext
    Path = sc._gateway.jvm.org.apache.hadoop.fs.Path
    FileSystem = sc._gateway.jvm.org.apache.hadoop.fs.FileSystem
    Configuration = sc._gateway.jvm.org.apache.hadoop.conf.Configuration
    df.coalesce(1).write.option("header", True).option("delimiter", "|").option("compression", "none").csv(hdfs_path)
    fs = FileSystem.get(Configuration())
    file = fs.globStatus(Path("%s/part*" % hdfs_path))[0].getPath().getName()
    full_path = "%s/%s" % (hdfs_path, file_name)
    result = fs.rename(Path("%s/%s" % (hdfs_path, file)), Path(full_path))
    return result

.coalesce(1)将保证只有1个文件,但不保证文件名。请使用一些临时目录来保存它,而不是重命名它并复制(如果您使用数据块,则使用 dbutils.fs 函数或使用来自 Hadoop API 的 FileUtil)。