我加入了两个RDD rddA
和rddB
。锄头Spark是否计划加入?
rddA
有100个分区,rddB
有500个分区。
我想了解join
操作的机制。默认情况下,无论连接的顺序如何,我都会得到相同的分区结构;即rddA.join(rddB
)和rddB.join(rddA)
产生相同数量的分区,并且通过观察它使用较小的分区大小,100.我知道我可以通过使用rddA.join(rddB,500)
来增加分区大小,但是我更关心在引擎盖下发生了什么以及为什么选择较小的尺寸。从观察结果来看,即使我重新划分小型rdd
,它的分区仍然会被使用; Spark是否对密钥大小做过任何启发式分析?
我的另一个问题是我得到的偏斜程度。我的小分区最终以3,314个条目结束,而最大分区总数达到599,911,729个(键),总数为1,139,207个。两个RDD都使用默认分区程序,那么数据混洗是如何决定的? 我依稀记得,如果一个rdd
有一个分区程序集,那么它将被使用的分区程序。是这样吗?这是“推荐”吗?
最后,请注意,我的两个rdd
s都比较大(〜90GB),因此广播连接无济于事。相反,任何对join
操作提供一些见解的方式都可能是要走的路。
PS。关于机制左右连接的任何细节都将是额外的好处:)