如何从 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 中有效地从字符串数据框中替换多个正则表达式模式的所有实例?