在 Apache Spark 中使用 join 时,数据集大小的组织是不是重要?
Posted
技术标签:
【中文标题】在 Apache Spark 中使用 join 时,数据集大小的组织是不是重要?【英文标题】:Does the organization of dataset size matter when using join in Apache Spark?在 Apache Spark 中使用 join 时,数据集大小的组织是否重要? 【发布时间】:2015-03-27 12:38:32 【问题描述】:我有两个想要加入的 RDD。一个非常大,XL
,另一个是常规大小,M
。为了速度,我加入他们的顺序是否重要?例如:
val data = M.join(XL)
对
val data =XL.join(M)
【问题讨论】:
【参考方案1】:在“核心”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 大小。
【讨论】:
【参考方案2】:根据this answer,它没有重要。我不确定另一个问题是否相同,因为它询问的是表而不是 RDD。提问者可能指的是 SparkSQL 中正在连接的表,但答案是关于 RDD。
【讨论】:
以上是关于在 Apache Spark 中使用 join 时,数据集大小的组织是不是重要?的主要内容,如果未能解决你的问题,请参考以下文章
基于Apache Hudi 和 Apache Spark Sql 的近实时数仓架构之宽表建设
基于Apache Hudi 和 Apache Spark Sql 的近实时数仓架构之宽表建设