在Apache Spark中使用连接时,数据集大小的组织是否重要?

时间:2015-03-27 12:38:33

标签: scala join optimization apache-spark bigdata

我想要加入两个RDD。一个非常大,XL,另一个是常规大小M。为了速度,我加入他们的订单是否重要?例如:

val data = M.join(XL)

VS

val data =XL.join(M)

2 个答案:

答案 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。