Apache spark 将Spark DataFrame存储为.csv时重命名文件

Apache spark 将Spark DataFrame存储为.csv时重命名文件,apache-spark,apache-spark-sql,azure-storage-blobs,Apache Spark,Apache Spark Sql,Azure Storage Blobs,我目前正在将spark数据帧作为.csv文件存储在Azure上的blob存储中。我正在使用以下代码 smtRef2_DF.dropDuplicates().coalesce(1).write .mode("overwrite") .format("com.databricks.spark.csv") .option("header", "true") .save(csvBlobStorageMount + "/Output/Smt/SmtRef.csv") 这是可行的,但它会

我目前正在将spark数据帧作为.csv文件存储在Azure上的blob存储中。我正在使用以下代码

 smtRef2_DF.dropDuplicates().coalesce(1).write
  .mode("overwrite")
  .format("com.databricks.spark.csv")
  .option("header", "true")
  .save(csvBlobStorageMount + "/Output/Smt/SmtRef.csv")
这是可行的,但它会创建一个SmtRef.csv文件夹,其中实际的.csv文件存储为part-00000-tid.csv。如何指定实际.csv文件的名称


提前感谢

使用spark api是不可能的

如果要实现此目的,请使用.repartition(1),它将生成一个部分文件,然后使用Hadoop文件系统api在HDFS中重命名该文件

导入org.apache.hadoop.fs_
FileSystem.get(spark.sparkContext.hadoopConfiguration()).rename(新路径(“oldpathtillpartfile”)、新路径(“newpath”))

使用spark api是不可能的

如果要实现此目的,请使用.repartition(1),它将生成一个部分文件,然后使用Hadoop文件系统api在HDFS中重命名该文件

导入org.apache.hadoop.fs_
FileSystem.get(spark.sparkContext.hadoopConfiguration()).rename(新路径(“oldpathtillpartfile”)、新路径(“newpath”))

如果文件足够小,可以放入内存,一种解决方法是将其转换为pandas数据帧并从中另存为csv

df_pd = df.toPandas()
df_pd.to_csv("path")

如果文件足够小,可以放入内存,一种解决方法是将其转换为pandas数据帧并从中保存为csv

df_pd = df.toPandas()
df_pd.to_csv("path")

我认为这个问题不应该被解决——保存为单个文件与重命名文件不同。这里有一个使用PYARROW&pathlib def rename_file_hdfs(hdfs_path)重命名的选项:phc=PYARROW.hdfs.connect()fl=phc.ls(hdfs_path)fl=[f for f in fl if pathlib.path(f).stem.startswith(“part)]for i,f in enumerate(fl):pa=path(fl[0])。parent nf=f“newf{i}.csv”tp=path(pa,nf)tp=str(tp)。replace(”hdfs:/“,”hdfs:/”)phc.mv(f“{f}”,f“{tp}”)我认为这个问题不应该被关闭-保存为单个文件与重命名文件不同。这里有一个使用PYARROW和pathlib def rename_file_hdfs(hdfs_path)重命名文件的选项:phc=PYARROW.hdfs.connect()fl=phc.ls(hdfs_path)fl=[f for f in fl if-pathlb.path(f).stem.starwith枚举(fl)中i,f的((“部分)]:pa=Path(fl[0])。父nf=f“newf{i}.csv”tp=Path(pa,nf)tp=str(tp)。替换为(“hdfs:/”,“hdfs:/”)phc.mv(f{f},f{tp})