我正在尝试构建一个动态将大型数据集连接到几个小得多的数据集的组件。我已经将大而小的数据集作为数据帧保存在内存中。随着用户输入的进入,我需要选择大数据集的一个子集,并用较小数据集中的一些信息进行丰富。
不幸的是,这些动态连接被证明是昂贵的,大约几分钟而不是几秒。我想要探索的一个途径是将较小数据集的副本发送到我的集群上的所有节点,以便在每个节点上同时进行连接,并在结束时简单地收集结果。但是,我不确定最好的方法。
Broadcast variables似乎是跨节点传输数据以进行计算的唯一方法。但是,Spark文档并没有说明适当的用例。我上面描述的是否适合广播变量?将数据帧用作广播变量是可接受的,甚至是否可能?有没有其他更好的途径可以快速加入像这样的数据框?
答案 0 :(得分:1)
这实际上是否更快取决于小数据集的大小以及您想要更改它们的频率。
在任何情况下,您都不能广播Spark DataFrame
,而是需要将小数据集广播为普通变量/结构。我还建议您在join
而不是普通mapPartitions
中尝试map
,看看这是否会加快速度。
另外:您将无法在工作程序例程中使用Spark join
,但必须定义您自己的例程或使用可以处理的库的join
例程与数据集的类型。