如何从 pyspark 数据框中更快地保存 csv 文件?

Posted

技术标签:

【中文标题】如何从 pyspark 数据框中更快地保存 csv 文件?【英文标题】:How to save csv files faster from pyspark dataframe? 【发布时间】:2019-08-01 14:23:09 【问题描述】:

我目前在本地 Windows 10 系统上使用 pyspark。 pyspark 代码运行速度非常快,但需要花费大量时间将 pyspark 数据帧保存为 csv 格式。

我正在将 pyspark 数据帧转换为 pandas,然后将其保存为 csv 文件。我也尝试过使用 write 方法来保存 csv 文件。

Full_data.toPandas().to_csv("Level 1 -  Hourly Avg Data.csv".format(yr), index=False)




Full_data.repartition(1).write.format('com.databricks.spark.csv').option("header", "true").save("Level 1 -  Hourly Avg Data.csv".format(yr))

这两个代码都花了大约一个小时来保存 csv 文件。有没有更快的方法从 pyspark 数据帧中保存 csv 文件?

【问题讨论】:

你试过第二种方法没有repartition(1)吗?您以后可以随时连接零件文件(速度很快)。 您是否严格需要 CSV 格式的文件?如果您只需要将其写入磁盘,请查看 parquet 文件,它们非常快。 1 小时?你的数据集有多大?你的电脑有几个核心?在写作之前你是否在执行任何分组或聚合? 【参考方案1】:

在报告的两个示例中,您都在降低并行度。

在第一个示例 (toPandas) 中,从计算上讲就像调用函数 collect()。您将数据帧收集到驱动程序中的集合中,使其成为单线程。

在第二个示例中,您调用 repartition(1),它将并行度降低到 1,使其再次成为单线程。

尝试改用repartition(2)(或 4 或 8...,具体取决于您机器的可用执行线程数)。这应该会利用 Spark 并行性产生更快的结果(即使它会将结果拆分为多个文件,在相同数量的重新分区因子中)。

【讨论】:

以上是关于如何从 pyspark 数据框中更快地保存 csv 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pyspark 数据框中读取 csv 文件时读取选定的列?

如何使用 pySpark 使多个 json 处理更快?

如何从火花数据框中提取 csv 名称

如何在 pySpark 中有效地从字符串数据框中替换多个正则表达式模式的所有实例?

如何将 CSV 值与 pyspark 数据框中的单元格中的值分别分隔为新列及其值

使用 pyspark 将 Spark 数据框中的列转换为数组 [重复]