尝试在 DBFS 上将 Spark Dataframe 以 CSV 格式保存到磁盘

Posted

技术标签:

【中文标题】尝试在 DBFS 上将 Spark Dataframe 以 CSV 格式保存到磁盘【英文标题】:Trying to Save Spark Dataframe to disk as CSV on DBFS 【发布时间】:2019-10-24 12:55:24 【问题描述】:

我发现了多个关于如何在 Databricks 平台上将 Dataframe 保存为 CSV 到磁盘的结果,例如 Spark Dataframe save as CSV How to save a spark DataFrame as csv on disk?

但是,每当我尝试将答案应用于我的情况时,它都会失败。因此,我在这里提交我自己的问题。

我使用以下代码生成以下数据框:

df = spark.read.format(file_type) \
  .option("inferSchema", infer_schema) \
  .option("header", first_row_is_header) \
  .option("sep", delimiter) \
  .load(file_location)

display(df)

我现在想将上述数据帧保存到磁盘。

我尝试了以下方法:

filepath = "/FileStore/tables"
df.coalesce(1).write.option("header","true").option("sep",",").mode("overwrite").csv("filepath")

但我收到以下错误:

谁能告诉我哪里出错了?

【问题讨论】:

我设法弄清楚为什么会出现上述错误 - 这是因为我试图写入 Databricks 的社区版。当我将代码应用到付费的 Databricks 平台时,一切正常。但是,该文件被保存为 part-00000-tid-3693777652656899971-46f65adb-4641-446f-863f-eade3e2b3155-2-1-c000.csv 。有人可以告诉我如何将文件重命名为更有意义的名称吗? 【参考方案1】:

根据原帖者的评论分享答案:

“我设法弄清楚为什么会出现上述错误 - 这是因为我试图写入 Databricks 的社区版。当我将代码应用到付费的 Databricks 平台时,一切正常”。

回答评论问题:

谁能告诉我如何将文件重命名为更多内容 有意义吗?

在Spark的存档中不能直接修改文件名。

Spark 使用 Hadoop 文件格式,这需要对数据进行分区 - 这就是您拥有部分文件的原因。您可以在处理后轻松更改文件名,就像在SO 线程中一样。

您可以参考类似的SO 线程,它解决了类似的问题。

希望这会有所帮助。

【讨论】:

以上是关于尝试在 DBFS 上将 Spark Dataframe 以 CSV 格式保存到磁盘的主要内容,如果未能解决你的问题,请参考以下文章

Spark Databricks 本地文件 API

将 Spark RDD 作为文本文件写入 S3 存储桶

从数据块 DBFS 中删除记录

无法在 NaiveBayes Spark 示例上将字符串转换为浮点数

尝试访问 Azure Databricks 中的 Azure DBFS 文件系统时出现挂载错误

如何在 AWS 胶水上将嵌套的 JSON 扩展为 Spark 数据框