如何加快 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 中的大数据框连接的主要内容,如果未能解决你的问题,请参考以下文章

图解大数据 | 基于Spark RDD的大数据处理分析

Scala(Spark)连接数据框中的列[重复]

Scala和Spark的大数据分析

大数据实习之spark

如何有效地展平Spark数据框中的特征?

如何优化mysql中的大表?