如何在 Spark 中加速大型数据帧联接



我在Spark 2.4中有2个数据帧,它们的大小接近相同。每个都有大约 4000 万条记录。一个是通过从 S3 加载数据帧来生成的,另一个是加载一堆数据帧并使用 sparkSQL 生成一个大数据帧。然后,我将这两个数据帧多次连接到多个数据帧中,并尝试将它们作为 CSV 写入 S3...但是,我看到我的写入时间超过 30 分钟,我不确定它是否正在重新评估数据帧,或者我是否需要更多 CPU 来完成此任务。尽管如此,我希望有人可以就如何优化这些写入时间提供一些建议。

因此,当从其他数据帧创建数据帧时,似乎首先创建的是执行计划。然后在执行写入操作时评估该计划。

处理这种特殊情况的最佳方法是利用 Spark 延迟加载缓存(我还没有看到 Spark 的急切加载解决方案,但如果存在,可能会更好(。

通过做:dataframe1.cache()

dataframe2.cache()

首次联接这两个数据帧时,将评估这两个数据帧并将其加载到缓存中。然后,当再次联接和写入时,已经评估了 2 个数据帧执行计划,并且联接和写入速度会快得多。

这意味着第一次写入仍然需要 30 多分钟,但其他 2 次写入要快得多。

此外,您还可以通过额外的 CPU 以及数据帧的正确划分和合并来提高性能。这可能有助于评估第一个连接和写入操作。

希望这有帮助。

最新更新