在 Databricks PySpark 中本地保存文件

Posted

技术标签:

【中文标题】在 Databricks PySpark 中本地保存文件【英文标题】:Saving a file locally in Databricks PySpark 【发布时间】:2017-09-02 19:44:55 【问题描述】:

我确信某处有这方面的文档和/或解决方案很明显,但我在所有搜索中都没有找到答案。

我有一个要导出到本地机器的文本文件的数据框。数据框包含带逗号的字符串,因此仅显示 -> 下载完整结果会导致导出失真。我想用制表符分隔符导出,但我一辈子都不知道如何在本地下载它。

我有

match1.write.format("com.databricks.spark.csv")
.option("delimiter", "\t")
.save("file:\\\C:\\Users\\user\\Desktop\\NewsArticle.txt")

但显然这是不对的。我怀疑它正在其他地方写(我不希望它在某个地方......),因为再次运行它会给我路径已经存在的错误。那么...正确的方法是什么?

【问题讨论】:

Windows 使用反斜杠作为路径,您需要转义它们 你在哪里运行这个?数据砖在线?你的本地文件系统没有安装在那里...你见过forums.databricks.com/questions/11730/… 是的,经过一些调整,这很有效。非常感谢! @kodachrome - 太棒了!您应该发布为解决此问题而采取的步骤作为对这篇文章的回答。如果他们将来遇到类似问题,这肯定会对其他人有所帮助。 【参考方案1】:

cricket_007 为我指明了正确的路径——最终,我需要将文件保存到 Databricks 的 Filestore(不仅仅是 dbfs),然后保存 xxxxx.databricks.com/file/[插入文件的结果输出这里的路径]链接。

我的结果代码是:

df.repartition(1) \ #repartitioned to save as one collective file
.write.format('csv') \ #in csv format
.option("header", True) \ #with header
.option("quote", "") \ #get rid of quote escaping
.option(delimiter="\t") \ #delimiter of choice
.save('dbfs:/FileStore/df/') #saved to the FileStore

【讨论】:

如果您在问题中澄清您在 Databricks 工作会有所帮助...【参考方案2】:

检查它是否存在于以下位置。该文件夹中应该有多个零件文件。

import os
print os.getcwd()

如果你想创建一个文件(而不是多个部分文件),那么你可以使用coalesce()(但请注意,它会强制一名工作人员获取整个数据并按顺序写入这些数据,因此如果处理大量数据,则不建议这样做数据)

df.coalesce(1).write.format("csv").\
    option("delimiter", "\t").\
    save("<file path>")

希望这会有所帮助!

【讨论】:

很遗憾,它不存在。 os.getcwd() 返回一些我不认识的 Databricks 目录。看起来我的文件正在保存到 Databricks 的 dbfs 中……我想我需要想办法从那里下载它 在这种情况下,@cricket_007 的建议似乎是解决此问题的可能方法。可以试试吗?

以上是关于在 Databricks PySpark 中本地保存文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Databricks 的 PySpark 中使用在 Scala 中创建的 DataFrame

如何使用 Python / Pyspark 在 Databricks 笔记本中合并数据帧

如何在 Azure Databricks PySpark 中执行存储过程?

PySpark:如何将 GitHub 库导入 Databricks?

如何使用 Pyspark 在 Databricks 中合并 Hive 表中的记录?

如何在 Databricks pyspark 中导入 Excel 文件