我想要加入两个RDD。一个非常大,XL
,另一个是常规大小M
。为了速度,我加入他们的订单是否重要?例如:
val data = M.join(XL)
VS
val data =XL.join(M)
答案 0 :(得分:2)
On'核心' Spark,如果您使用join
,订单无关紧要。但是你可以使用广播变量来优化连接,并使用地图进行连接。
val bcSmallData = sc.broadcast(sRDD)
xlRDD.map{ case (k,v) => (k,(v, scSmallData.value.get(k)))}
有关详细说明,请参阅此'Advanced Spark'演示文稿。
现在,如果您使用SparkSQL,则会自动完成此优化。有一个配置选项(spark.sql.autoBroadcastJoinThreshold
)控制较小表的阈值大小,以便进行广播。联接的顺序无关紧要。查询优化器将查看RDD大小。
答案 1 :(得分:0)
根据this answer,不很重要。我不确定另一个问题是否相同,因为它询问的是表而不是RDD。提问者可能是指在SparkSQL中加入的表,但答案是关于RDD。