在 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 Spark 中支持的七种 Join 类型简介

Apache Spark 中支持的七种 Join 类型简介

基于Apache Hudi 和 Apache Spark Sql 的近实时数仓架构之宽表建设

基于Apache Hudi 和 Apache Spark Sql 的近实时数仓架构之宽表建设

基于Apache Hudi 和 Apache Spark Sql 的近实时数仓架构之宽表建设

Apache Spark 2.2中基于成本的优化器(CBO)(转载)