如何加快 Spark 中的大数据框连接
Posted
技术标签:
【中文标题】如何加快 Spark 中的大数据框连接【英文标题】:How to speed up large data frame joins in Spark 【发布时间】:2020-05-13 17:15:13 【问题描述】:我在 Spark 2.4 中有 2 个数据帧,它们的大小接近。每个都有大约 4000 万条记录。一个是通过从 S3 加载数据帧简单生成的,另一个加载一堆数据帧并使用 sparkSQL 生成一个大数据帧。然后我将这两个数据帧多次合并到多个数据帧中,并尝试将它们作为 CSV 写入 S3 ......但是我看到我的写入时间超过 30 分钟,我不确定它是否正在重新评估数据帧或者是否也许我需要更多的 CPU 来完成这项任务。尽管如此,我还是希望有人对如何优化这些写入时间提出一些建议。
【问题讨论】:
【参考方案1】:因此,当从其他数据帧创建数据帧时,似乎首先创建的是执行计划。然后在执行写操作时,该计划被评估。
处理这种特殊情况的最佳方法是利用 spark 延迟加载缓存(我还没有看到 spark 的紧急加载解决方案,但如果存在它可能会更好)。
通过这样做:
dataframe1.cache()
和
dataframe2.cache()
当您第一次加入这两个数据帧时,这两个数据帧都被评估并加载到缓存中。然后当再次加入和写入时,已经评估了 2 个数据帧执行计划,并且加入和写入变得更快。
这意味着第一次写入仍然需要 30 多分钟,但其他 2 次写入要快得多。
此外,您可以通过额外的 CPU 以及数据帧的适当分区和合并来提高性能。这可能有助于评估第一个连接和写入操作。
希望这会有所帮助。
【讨论】:
以上是关于如何加快 Spark 中的大数据框连接的主要内容,如果未能解决你的问题,请参考以下文章