如何拆分大数据帧并使用较小的部分在 Spark 中进行多个广播连接?

Kum*_*hav 3 scala apache-spark

假设我们有两个非常大的数据帧 - A 和 B。现在,我明白如果我对两个 RDD 使用相同的哈希分区器然后进行连接,键将位于同一位置,并且连接可能会更快,同时减少混洗(唯一会发生的改组将是分区程序在 A 和 B 上发生变化时)。

我想尝试一些不同的东西 - 我想像这样尝试广播连接 -> 假设 B 比 A 小,所以我们选择 B 进行广播,但 B 仍然是一个非常大的数据帧。所以,我们想要做的是从 B 中制作多个数据帧,然后将每个数据帧作为广播发送到 A 上。

有没有人试过这个?要将一个数据帧拆分为多个数据帧,我只看到了 randomSplit 方法,但这看起来并不是一个很好的选择。

还有其他更好的方法来完成这项任务吗?

谢谢!

use*_*732 5

有没有人试过这个?

是的,已经有人试过了。特别是 GoDataDriven。您可以在下面找到详细信息:

他们声称对偏斜数据的结果非常好,但是您必须自己考虑三个问题:

randomSplit 方法,但这看起来不是一个很好的选择。

这实际上并不是一件坏事。

还有其他更好的方法来完成这项任务吗?

您可以尝试按分区 id 过滤。