如何将PySpark数据框保存为自定义文件名的CSV ?



这是我想要保存为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">

我也有同样的需求。您可以写入到一个路径,然后更改文件路径。这就是我的解决方案。

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

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

不建议这样做,但如果您的数据足够小(可以说什么是"足够小")。在这里),您总是可以将其转换为Pandas,并将其保存到一个CSV文件中,并使用您想要的任何名称。

.coalesce(1)将保证只有一个文件,但不保证文件名。请使用一些临时目录来保存它,然后重新命名它并使用butils进行复制。

最新更新