我有两个想要加入的 RDD。一款非常大,XL
,另一种是常规尺寸,M
。为了速度,我加入他们的顺序重要吗?例如:
val data = M.join(XL)
对比
val data =XL.join(M)
最佳答案
在“核心”Spark 上,如果您使用join
,则顺序并不重要。但是您可以使用广播变量来优化连接并使用 map 进行连接。
val bcSmallData = sc.broadcast(sRDD)
xlRDD.map{ case (k,v) => (k,(v, scSmallData.value.get(k)))}
查看此'Advanced Spark'演示文稿以获取详细解释。
现在,如果您使用 SparkSQL,此优化会自动为您完成。有一个配置选项 (spark.sql.autoBroadcastJoinThreshold
) 可以控制要广播的较小表的阈值大小。连接的顺序并不重要。查询优化器将查看 RDD 大小。
关于scala - 在 Apache Spark 中使用联接时,数据集大小的组织是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29300878/