当前位置: 首页 > 知识库问答 >
问题:

将Spark DataFrame的内容保存为单个CSV文件[重复]

施同
2023-03-14

假设我有一个Spark数据框,我想将其另存为CSV文件。在Spark 2.0.0之后,DataFrameWriter类直接支持将其保存为CSV文件。

默认行为是将输出保存在多个部分-*。提供的路径中的csv文件。

如何使用以下选项保存DF:

  1. 路径映射到确切的文件名,而不是文件夹
  2. 首行可用标题
  3. 另存为单个文件,而不是多个文件

处理它的一种方法是合并DF,然后保存文件。

df.coalesce(1).write.option("header", "true").csv("sample_file.csv")

然而,这在将其收集到主机上时存在缺点,需要有一个具有足够内存的主机。

是否可以在不使用合并的情况下编写单个CSV文件?如果没有,是否有比上述代码更有效的方法?

共有3个答案

翟沈义
2023-03-14
df.coalesce(1).write.option("inferSchema","true").csv("/newFolder",header = 
'true',dateFormat = "yyyy-MM-dd HH:mm:ss")
董元徽
2023-03-14

使用:df.toPandas()。to_csv("sample_file.csv",标头=True)

有关详细信息,请参阅文档:https://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=dataframe#pyspark.sql.DataFrame.toPandas

弓宏茂
2023-03-14

我自己用pyspark和dbutils解决了这个问题。csv并重命名为所需的文件名。

save_location= "s3a://landing-bucket-test/export/"+year
csv_location = save_location+"temp.folder"
file_location = save_location+'export.csv'

df.repartition(1).write.csv(path=csv_location, mode="append", header="true")

file = dbutils.fs.ls(csv_location)[-1].path
dbutils.fs.cp(file, file_location)
dbutils.fs.rm(csv_location, recurse=True)

这个答案可以通过不使用[-1]来改进,但可以使用。csv似乎总是文件夹中的最后一个。如果您只处理较小的文件,并且可以使用重新分区(1)或合并(1),那么就可以使用简单而快速的解决方案

 类似资料:
  • 问题内容: 我有一个包含数千个.txt文件的文件夹。我想根据以下模型将它们合并到一个大的.csv文件中: 我发现应该执行此工作的R脚本(https://gist.github.com/benmarwick/9265414),但它显示此错误。 我不明白我的错是什么。 没关系,我很确定没有R也可以做到这一点。如果您知道一个非常优雅和简单的方法,将不胜感激(这对像我这样的很多人很有用) 精度:文本文件为

  • 本文向大家介绍如何将Python词典保存为CSV文件?,包括了如何将Python词典保存为CSV文件?的使用技巧和注意事项,需要的朋友参考一下 CSV(逗号分隔值)是最常见的文件格式,许多平台和应用程序都广泛支持该格式。 使用Python标准库中的csv模块。最简单的方法是在open()函数的帮助下以“ w”模式打开一个csv文件,并以逗号分隔的形式写入键值对。 csv模块包含DictWriter

  • 在这里你可以看到我正在处理的一些文件。 与我最相似的问题是这个问题(将一个文本文件文件夹合并到一个CSV中,每个内容都在一个单元格中),但我无法实现那里提出的任何解决方案。 我尝试的最后一个是Nathaniel Verhaaren在前面提到的问题中提出的Python代码,但我得到了与问题作者完全相同的错误(即使在实施了一些建议之后): 与我类似的其他问题(例如,Python:将多个。txt文件解析

  • 我目前正在将spark数据帧存储为。Azure上blob存储中的csv文件。我正在使用以下代码。 这是可行的,但它会创建一个SmtRef。csv文件夹中的实际。csv文件存储为part-00000-tid。csv。如何指定实际的名称。csv文件? 提前感谢

  • 此函数返回以下内容: 我想让我的python脚本可以将股票历史数据保存到一个csv文件中,这样我就可以在以后的项目中使用它。我试着用csv模块做这件事,但是找不到任何与我正在尝试做的事情相匹配的东西。是否有任何方法可以将这些数据存储到一个新的csv文件中,而不需要一个现有的文件。

  • 我有一个按值排序的元组列表。它们以的形式出现,其中count是每个唯一名称的出现次数。 我想把这个列表转换成CSV,其中每个名称都是列标题,每个值都是单行的列值。 有什么建议吗?谢谢