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

标签 scala join optimization apache-spark bigdata

我有两个想要加入的 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/

相关文章:

sql - 2 选择或 1 加入查询?

multithreading - 尝试更改内容时 Scala 摆动面板消失(仅在运行线程时)

r - 连接和求和不兼容的矩阵

scala - 如何在 Scala 中创建多维向量?

SQL 查询 JOIN 一个表(单独的 ID 和 Titles 表)

optimization - 使用 CPLEX 检查新变量降低的成本

c++ - g++ 4.8.5 负数组索引的循环优化错误

python - 更有效的方法来做到这一点

scala - 共享错误和密封特征的函数

scala - 如何跨 Array[DataFrame] 组合(加入)信息