【问题标题】:Rename File When storing Spark DataFrame as .csv [duplicate]将 Spark DataFrame 存储为 .csv 时重命名文件 [重复]
【发布时间】:2019-02-04 09:39:23
【问题描述】:

我目前正在将 spark DataFrame 作为 .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 文件的名称?

提前致谢

【问题讨论】:

  • 我认为这个问题不应该被关闭 - 保存为单个文件不像重命名文件。这是使用 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}")

标签: apache-spark apache-spark-sql azure-blob-storage


【解决方案1】:

如果文件小到足以放入内存,一种解决方法是转换为 pandas 数据帧并从那里另存为 csv。

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

【讨论】:

    【解决方案2】:

    使用 spark api 是不可能的。

    如果你想实现这一点,请使用 .repartition(1) 生成一个 PART 文件,然后使用 Hadoop 文件系统 api 重命名 HDFS 中的文件

    导入 org.apache.hadoop.fs._ FileSystem.get(spark.sparkContext.hadoopConfiguration()).rename(new Path(“oldpathtillpartfile”), new path(“newpath”))

    【讨论】:

      猜你喜欢
      • 2017-06-18
      • 2017-06-17
      • 2021-12-18
      • 2017-11-29
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      相关资源
      最近更新 更多