我在Spark 2.4中有2个数据帧,它们的大小接近相同。每个都有大约 4000 万条记录。一个是通过从 S3 加载数据帧来生成的,另一个是加载一堆数据帧并使用 sparkSQL 生成一个大数据帧。然后,我将这两个数据帧多次连接到多个数据帧中,并尝试将它们作为 CSV 写入 S3...但是,我看到我的写入时间超过 30 分钟,我不确定它是否正在重新评估数据帧,或者我是否需要更多 CPU 来完成此任务。尽管如此,我希望有人可以就如何优化这些写入时间提供一些建议。
因此,当从其他数据帧创建数据帧时,似乎首先创建的是执行计划。然后在执行写入操作时评估该计划。
处理这种特殊情况的最佳方法是利用 Spark 延迟加载缓存(我还没有看到 Spark 的急切加载解决方案,但如果存在,可能会更好(。
通过做:dataframe1.cache()
和
dataframe2.cache()
首次联接这两个数据帧时,将评估这两个数据帧并将其加载到缓存中。然后,当再次联接和写入时,已经评估了 2 个数据帧执行计划,并且联接和写入速度会快得多。
这意味着第一次写入仍然需要 30 多分钟,但其他 2 次写入要快得多。
此外,您还可以通过额外的 CPU 以及数据帧的正确划分和合并来提高性能。这可能有助于评估第一个连接和写入操作。
希望这有帮助。